点击链接以结束Scrapy教程

时间:2018-12-11 10:27:12

标签: scrapy

不确定这是问这样一个一般性问题的正确地方。

但是,我似乎无法找到任何使用Scrapy抓取网站的示例或教程,方法是跟踪指向末尾页面的链接,该链接将包含我希望从该产品中提取信息的产品详细信息。

因此,我从主页上开始,我可以在其中刮除href的标签,但是我该如何跟随每个链接,这将带我到另一个页面,该页面将具有更多的href链接,如果再次关注,然后最终将我带到要提取的数据所在的产品信息本身

这是某种递归吗?抱歉,但是我对此并不陌生。有人知道一个好的教程/示例吗?我发现遵循官方文档有些困难。

2 个答案:

答案 0 :(得分:0)

我使用了Scrapy文档来做到这一点。

您可以在这里看到我的示例;

https://github.com/dbaleeds/ScrapyQuoteExtractor/blob/master/quotes/spiders/quotesBrainy.py

这是您要尝试的操作,从页面读取链接,然后跟随链接,然后从结果页面读取数据。

def parse(self, response):

读取链接页面。

def parse_item(self, response):

从上面跟随的链接中解析页面中的数据。

我建议实现此功能以了解其工作原理,然后以此为基础构建自己的项目。

答案 1 :(得分:0)

您可以在此处找到几个示例:https://github.com/scrapy/quotesbot

此外,这是一个解析http://books.toscrape.com/上的书籍的示例:

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor


class MySpider(CrawlSpider):

    name = 'toscrape.com'
    start_urls = ['http://books.toscrape.com/']

    rules = (
        # The links that matches the allow / deny arguments will be processed in parse_book.
        Rule(LinkExtractor(allow=('/catalogue/',), deny=('/category/', '/page')), callback='parse_book'),

        # These links will be processed in the CrawlSpider defaut callback that will look for new links.
        Rule(LinkExtractor(allow=('/page',))),
    )

    def parse_book(self, response):

        yield {
            'title': response.css('div.product_main>h1::text').extract_first(),
            'price': response.css('p.price_color::text').extract_first(),
        }

如本例所示,使用CrawlSpider时,scrapy会自动为您提取链接并对其进行迭代,直到找不到为止。