如何在Scrapy中从parse函数提取链接并加入爬取结果
修改方案:为Scrapy爬虫新增link字段
直接修改parse_item方法即可,利用Scrapy响应对象自带的url属性获取详情页完整链接,以下是修改后的完整代码:
import scrapy from scrapy.crawler import CrawlerProcess class weeklymining(scrapy.Spider): name = 'weeklymining' start_urls = ['https://www.miningweekly.com/page/coal/page:'+str(x) for x in range(0,351)] def parse(self, response): for link in response.xpath('//*[@class="en-serif"]/a/@href'): yield response.follow( url=link.get(), callback=self.parse_item ) def parse_item(self, response): yield { 'date': response.xpath('//*[@class="article_title"]//p/span[1]/text()').extract(), 'title': response.xpath('//*[@id="article_headline"]/text()').get(), 'text':''.join([x.get().strip() for x in response.xpath('//*[@id="article_content_container"]//p//text()')]), 'link': response.url # 新增的link字段 } if __name__ == '__main__': process = CrawlerProcess() process.crawl(weeklymining) process.start()
修改说明
- 核心修改:在
parse_item方法的返回字典中添加'link': response.url,response.url会自动返回当前详情页的完整URL,无需额外传递参数,是最简洁高效的方式。 - 备选方案(如需自定义传递链接):如果需要在
parse环节手动传递链接,可通过meta参数实现:- 在
parse方法中修改response.follow:yield response.follow( url=link.get(), callback=self.parse_item, meta={'detail_link': link.get()} ) - 在
parse_item方法中获取链接:'link': response.meta.get('detail_link')
- 在
内容的提问来源于stack exchange,提问作者yangyang
相关产品推荐
相关产品推荐

