当前位置:   article > 正文

Python-爬虫(七)scrapy-爬取糗事百科分页内容,解决分页请求重定向问题

Python-爬虫(七)scrapy-爬取糗事百科分页内容,解决分页请求重定向问题

上篇内容我们只把第一页内容爬取了下来,这次我们看下scrapy中的分页是怎么查询出来的。

在上篇的代码基础上我们修改spiders下的代码:

要注意和之前不同的地方。

  1. import scrapy
  2. from first_project.items import FirstProjectItem
  3. #爬虫继承scrapy.Spider
  4. class QiushibaikeSpider(scrapy.Spider):
  5. # 当前爬虫的名字,一个项目中唯一,后面启动当前爬虫使用这个name
  6. name = 'qiushibaike'
  7. # 当前爬虫的网址域名起到限定作用
  8. allowed_domains = ['qiushibaike.com']
  9. # 爬虫的起始url,scrapy会首先请求这个里面配置的url,
  10. # 然后把返回的结果传递给下面的parse函数,response参数就是返回的内容
  11. start_urls = ['https://www.qiushibaike.com/8hr/page/1/']
  12. BASE_URL='https://www.qiushibaike.com'
  13. def parse(self, response):
  14. # response是一个HtmlResponse对象,可以用它获取返回的内容response.text,使用xpath获取内容response.xpath("..")
  15. print("*************************")
  16. responseContent = response.xpath("//div[@class='recmd-right']")
  17. for i in responseContent:
  18. author=i.xpath(".//span[@class='recmd-name']/text()").get()
  19. title=i.xpath(".//a[@class='recmd-content']/text()").get()
  20. #把数据转为字典
  21. # data={"author": author,"title":title}
  22. data=FirstProjectItem(author=author,title=title)
  23. #把数据转给pipelines,需要使用 yield, 代表把数据转给底层框架,然后框架会转给pipelines.py文件中
  24. yield data
  25. ###开始分页查询
  26. #首先我们要找到下一页 地址
  27. next_url= response.xpath("//ul[@class='pagination']/li[last()]/a/@href").get()
  28. print(next_url)
  29. current_page=response.xpath("//ul[@class='pagination']/li/span[@class='current']/text()").get()
  30. if current_page:
  31. print('当前页数'+current_page)
  32. #因为页面到最后一页之后下一页就会变成首页,所以到这里就要停止
  33. if next_url=='/hot/':
  34. return
  35. else:
  36. #把请求yield出去交给框架处理,注意我这里加了meta参数,是防止重定向的,不然我这里直接请求会重定向别的错误地址
  37. yield scrapy.Request(self.BASE_URL+next_url,meta={
  38. 'dont_redirect': True,
  39. 'handle_httpstatus_list': [302,301]
  40. },callback=self.parse)

爬取的效果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/887460
推荐阅读
相关标签
  

闽ICP备14008679号