博客园只爬取每页第一条
来源:4-10 编写spider完成抓取过程 - 2
fine纯粹
2020-04-04
我是用您的源代码运行的,因为每页只爬取一条大概10页过后就要登录了
#收集博客园所有404的url以及404页面数 handle_httpstatus_list = [404] def __init__(self, **kwargs): self.fail_urls = [] dispatcher.connect(self.handle_spider_closed, signals.spider_closed) def handle_spider_closed(self, spider, reason): self.crawler.stats.set_value("failed_urls", ",".join(self.fail_urls)) def parse(self, response): """ 1. 获取文章列表页中的文章url并交给scrapy下载后并进行解析 2. 获取下一页的url并交给scrapy进行下载, 下载完成后交给parse """ #解析列表页中的所有文章url并交给scrapy下载后并进行解析 if response.status == 404: self.fail_urls.append(response.url) self.crawler.stats.inc_value("failed_url") post_nodes = response.css('#news_list .news_block') for post_node in post_nodes: image_url = post_node.css('.entry_summary a img::attr(src)').extract_first("") if image_url.startswith("//"): image_url = "https:" + image_url post_url = post_node.css('h2 a::attr(href)').extract_first("") yield Request(url=parse.urljoin(response.url, post_url), meta={"front_image_url": image_url}, callback=self.parse_detail) break #提取下一页并交给scrapy进行下载 next_url = response.xpath("//a[contains(text(), 'Next >')]/@href").extract_first("") if next_url: yield Request(url=parse.urljoin(response.url, next_url), callback=self.parse)
不知道哪里出了问题,要怎么获取每页的全部文章呢?
写回答
4回答
-
fine纯粹
提问者
2020-04-06
解决方法:把循环的break去掉就可以了
00 -
bobby
2020-04-06
这里保存到数据库中的地方都改成这种模式获取
022020-04-07 -
fine纯粹
提问者
2020-04-05
爬取一条后报错信息
00 -
bobby
2020-04-05
可以把这个逻辑注释一下 测试看看能否提取同一页的所有内容
022020-04-06
相似问题