如何解决拼凑的内部链接+管道和mongodb集合关系
我正在观看视频,并阅读一些有关python如何使用scrapy并将其插入mongodb的文章。
然后弹出两个问题,要么我没有使用正确的关键字搜索,要么就是找不到答案。
无论如何,让我在本教程网站https://blog.scrapinghub.com
上举例,以删除博客文章。
我知道我们可以得到标题,作者,日期等信息。但是,如果我也想获得内容怎么办?我需要单击更多才能进入另一个URL,然后获取内容。怎么办呢?
然后我要么希望内容与标题,作者,日期或标题,作者,日期相同,要么可以在一个集合中,而将内容放在另一个集合中,但是同一帖子应该相关。
>想到这个我有点迷茫,有人可以给我关于这种想法的建议吗?
在此先感谢您的帮助和建议。
解决方法
在您描述的情况下,您将从首页抓取内容,yield
到阅读更多页面的新请求,然后将您已经抓取的数据与Request
一起发送。当新请求回调为解析方法时,上一页中抓取的所有数据将可用。
推荐的发送方式是使用cb_kwargs。由于cb_kwargs
仅在Scrapy v1.7 +中可用,因此您经常会使用meta参数找到人员/教程。
这里是一个例子来说明:
class MySpider(Spider):
def parse(self,response):
title = response.xpath('//div[@id="title"]/text()').get()
author = response.xpath('//div[@id="author"]/text()').get()
scraped_data = {'title': title,'author': author}
read_more_url = response.xpath('//div[@id="read-more"]/@href').get()
yield Request(
url=read_more_url,callback=self.parse_read_more,cb_kwargs={'main_page_data': scraped_data}
)
def parse_read_more(self,response,main_page_data):
# The data from the main page will be received as a param in this method.
content = response.xpath('//article[@id="content"]/text()').get()
yield {
'title': main_page_data['title'],'author': main_page_data['author'],'content': content
}
请注意,cb_kwargs中的键必须与回调函数中的参数名称相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。