jjxx2005 发表于 2020-7-31 19:40:01

Scrapy框架的爬虫文件中遇到的问题?

本帖最后由 jjxx2005 于 2020-7-31 19:51 编辑

import scrapy
from C005.items import C005Item
class JklSpider(scrapy.Spider):
    name = 'bk'
    # allowed_domains = ['www.123.com']
    start_urls = ['https://www.qiushibaike.com/']
    页码 = 2
    def parse(self, response):
      总页数 = int(response.xpath(r'//a/span/text()').extract()[-2])
      文字 = response.xpath('//a[@class="recmd-content"]/text()').extract()
      print(文字)
      item = C005Item()
      item['文字'] = 文字
      yield item # 在一个函数中不能做两次返回,return和yield我都试过不行

      if self.页码 <= 总页数:
            url = f'https://www.qiushibaike.com/8hr/page/{self.页码}/'
            self.页码 += 1
            return scrapy.Request(url=url,callback=self.parse)

这个网页一共13页,第一页的url是https://www.qiushibaike.com/    从第2页到第13页 就变成了https://www.qiushibaike.com/8hr/page/2/   https://www.qiushibaike.com/8hr/page/3/以此类推
我的起始url是https://www.qiushibaike.com/   然后想让他解析之后,判断页码,当页码小于总页码时,就继续解析从第2页到第13页
这些都没问题

但是我需要做持久化存储。这时就要用   return item或yield item 可是一个 def 下面我无法使用两次 返回函数。。。

请问有没有什么好办法吗?

补充一下逻辑:
当url = https://www.qiushibaike.com 时,想直接yield item或return item
当页码 <= 总页数时,需要先return scrapy.Request(url=url,callback=self.parse)然后再 yield item或 return item

永恒的蓝色梦想 发表于 2020-7-31 19:50:11

提示:第一页的 URL 也可以是 https://www.qiushibaike.com/8hr/page/1/

永恒的蓝色梦想 发表于 2020-7-31 19:53:03

return scrapy.Request(url=url,callback=self.parse) 是要干啥?你的函数到底要返回什么?

jjxx2005 发表于 2020-7-31 19:54:44

永恒的蓝色梦想 发表于 2020-7-31 19:50
提示:第一页的 URL 也可以是 https://www.qiushibaike.com/8hr/page/1/

明白了 我试了好几个类似网站都是这样的情况 谢谢版主
页: [1]
查看完整版本: Scrapy框架的爬虫文件中遇到的问题?