本帖最后由 三木零 于 2021-7-24 14:10 编辑
实验的新结果:
有函数1、2、3
如果我是直接(1)函数爬取一个url传递给(2)函数来解析,(2)函数再爬取一个url传递给(3)函数解析
这样的话很快啊,一下就访问到了第三层
但是:
同样是1、2、3
我使用(1)函数爬取url,爬取出来的数据有多个url传递给(2)函数解析,而(2)函数要爬取两个数据(1、目标数据的url,2、下一页的url),目标url传递给(3)函数,下一页继续回调(2)函数
这时候就有个问题了,(1)(2)函数可以正常输出,但(3)函数就是没有数据出来
是有延迟还是怎么了,搞不明白
----------------------------------------------结论--------------------------------------------------------------------------
经过很长一段时间的运行,终于找到了问题所在
原来这是由于scrapy的一个特性
在(2)函数运行的时候,是一直调用了本身来获取下一页
但这个分类太多了,下一页有很多,就导致了大量的url传递给(2)函数
虽然也是有具体数据的url发送给(3)函数,但是(2)函数没有执行完毕之后是不会运行(3)函数的
也就是说要跑很久,如果只是学习的作用的话还是建议不要使用scrapy爬取太多的url了
--------------------------------------------------------------------原来问题的分割线----------------------------------------------------------------------
[Asm] 纯文本查看 复制代码 class BookSpider(scrapy.Spider):
name = 'book'
# allowed_domains = ['book']
start_urls = ['https://book.douban.com/tag/?view=type&icn=index-sorttags-all']
# 获取分类链接
def parse(self, response, **kwargs):
print("全部分类页面:" + response.url)
urls = response.xpath('//div[@id="content"]/div[1]/div[1]/div[2]/div/table/tbody/tr/td/a/text()').getall()
classification_urls = ["https://book.douban.com/tag/" + i for i in urls]
for url in classification_urls:
yield response.follow(url=url, callback=self.get_details, dont_filter=True)
# 获取分类中所有书籍的url
def get_details(self, response, **kwargs):
print("正在获取分类:" + response.url)
urls = response.xpath('//div[@id="subject_list"]/ul/li/div[@class="info"]/h2/a/@href').getall()
for url in urls:
yield response.follow(url=url, callback=self.get_data, dont_filter=True)
next_url = "https://book.douban.com" + response.xpath(
'//*[@id="subject_list"]/div[2]/span[last()]/a/@href').get()
print("下一页:" + next_url)
yield response.follow(url=next_url, callback=self.get_details, dont_filter=True)
# 获取详情页中的具体信息
def get_data(self, response, **kwargs):
print("书本详情页:" + response.url)
运行结果
[Asm] 纯文本查看 复制代码 全部分类页面:https://book.douban.com/tag/?view=type&icn=index-sorttags-all
正在获取分类:https://book.douban.com/tag/J.K.%E7%BD%97%E7%90%B3
下一页:https://book.douban.com/tag/J.K.罗琳?start=20&type=T
正在获取分类:https://book.douban.com/tag/%E5%87%A0%E7%B1%B3
下一页:https://book.douban.com/tag/几米?start=20&type=T
正在获取分类:https://book.douban.com/tag/%E9%83%AD%E6%95%AC%E6%98%8E
下一页:https://book.douban.com/tag/郭敬明?start=20&type=T
正在获取分类:https://book.douban.com/tag/%E9%9D%92%E6%98%A5%E6%96%87%E5%AD%A6
下一页:https://book.douban.com/tag/青春文学?start=20&type=T
|