Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted,
从而基于时间循环机制实现爬虫的并发。
scrapy的pipeline文件和items文件 这两个文件有什么作用先看看我们上篇的示例:
# -*- coding: utf-8 -*- import scrapy class ChoutiSpider(scrapy.Spider): ''' 爬去抽屉网的帖子信息 ''' name = 'chouti' allowed_domains = ['chouti.com'] start_urls = ['http://chouti.com/'] def parse(self, response): # 获取帖子列表的父级div content_div = response.xpath('//div[@id="content-list"]') # 获取帖子item的列表 items_list = content_div.xpath('.//div[@class="item"]') # 打开一个文件句柄,目的是为了将获取的东西写入文件 with open('articles.log','a+',encoding='utf-8') as f: # 循环item_list for item in items_list: # 获取每个item的第一个a标签的文本和url链接 text = item.xpath('.//a/text()').extract_first() href = item.xpath('.//a/@href').extract_first() # print(href, text.strip()) # print('-'*100) f.write(href+'\n') f.write(text.strip()+'\n') f.write('-'*100+'\n') # 获取分页的页码,然后让程序循环爬去每个链接 # 页码标签对象列表 page_list = response.xpath('//div[@id="dig_lcpage"]') # 循环列表 for page in page_list: # 获取每个标签下的a标签的url,即每页的链接 page_a_url = page.xpath('.//a/@href').extract() # 将域名和url拼接起来 page_url = 'https://dig.chouti.com' + page_a_url # 重要的一步!!!! # 导入Request模块,然后实例化一个Request对象,然后yield它 # 就会自动执行Request对象的callback方法,爬去的是url参数中的链接 from scrapy.http import Request yield Request(url=page_url,callback=self.parse)