拼凑的内部链接+管道和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中的键必须与回调函数中的参数名称相同。