1.复杂的start_urls。
有时候我们的起始url并不是单纯的url数组,可能是从数据库读取,可能是从文件中读取,也可能是通过requests访问远程API获取的。这时候就无法使用start_urls = []的形式了。需要采用一下方式:(以读取文件为例)
def start_requests(self):
self.urls = []
with open('D:\Java\program\myscrapy\hot\hot\htmls.txt', 'r') as f:
self.urls = f.readlines()
for url in self.urls:
time.sleep(2)
yield scrapy.Request(url=url, callback=self.parse)
2.采集遗漏
①Request中加入参数,主爬虫文件中的parse方法的请求函数中加入参数:dont_filter=True
yield scrapy.Request(next_path, dont_filter=True, callback=self.parse)
②修改Setting.py文件
# 解决爬取遗漏问题
AUTOTHROTTLE_ENABLED = True
③删除allowed_domains。有时候是被限制域给过滤掉了。
3.创建请求的快捷方式
普通形式: (不支持相对路径)
yield scrapy.Request(next_page, callback=self.parse)
快捷方式:(支持相对路径)
yield response.follow(next_page, callback=self.parse)
yield from response.follow_all(anchors, callback=self.parse)