练习(三)
目标抓取
- 在练习二的基础上按照分页信息抓取每一页信息
首先我们抓取下一页的连接
>>> response.css('.next a::attr(href)').extract_first()
'?page=2'
接下来修改parse方法
def parse(self, response):
next_page = response.css('.next a::attr(href)').extract_first()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)
parse方法返回request时scrapy会继续安排抓取该连接并调用相应回调函数
代码中我们使用了response.urljoin(next_page)
该方法会将相对路径的URL拼接返回绝对路径的URL
scrapy.Request接受绝对路径的URL参数
便捷方式
除了上面的scrapy.Request方式外我们还可以采用response.follow的方式
def parse(self, response):
items = response.css("div.news__item")
for item in items:
load = ItemLoader(item=NewsItem(),selector=item)
load.add_css('url', "div.news__item-info h4 a::attr(href)")
load.add_css('praise', "div.stream__item-zan span.stream__item-zan-number::text")
load.add_css('title', "div.news__item-info h4 a::text")
yield load.load_item()
for a in response.css('.next a'):
yield response.follow(a, callback=self.parse)
response.follow可以接受相对路径并且可以接受selector和string类型,如果是a标签则会自动提取href属性的连接
网友评论