|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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][1:-1])
- 文字 = 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
|
|