本节通过使用scrapy爬取豆瓣图书top250下所有图书来介绍如何使用scrapy爬取多列表页的内容,以及介绍更多scrapy的用法
如图所示:
豆瓣图书列表页
豆瓣图书详情页
上图所示打了红色框框的就是要爬取的内容。
直接上代码:
items.py
settings.py
bookspider.py
上面有几个地方注意:
首先,这个网站会检测你是不是个浏览器,所以要加headers头伪装成浏览器
有两种方式,
第一种是在settings.py中添加一个:
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
第二种是我们在spider文件中去添加,这种更灵活
首先我们要知道,start_requests方法,这个方法只会在请求start_urls的时候自动调用,但是在请求其他添加的url是不会调用这个的,
start_requests方法的源码如下:
def start_requests(self):
for url in self.start_urls:
yield Request(url, dont_filter=True)
里面的Request就是scrapy.Request()
Request相当于我们在requests模块中的请求方法requests.get()或者requests.post()
我们只要在spider中重写这个start_requests方法,在他的Request()方法中传入headers即可
因为他只有在请求初始url的时候才调用start_requests方法,所以请求分页的时候,scrapy.Request中也要传入headers
pipelines.py