scrapy如何使用规则?

OfL*_*ers 11 python response scrapy

我是使用Scrapy的新手,我想了解如何在CrawlSpider中使用规则.

如果我有一个规则,我在亚利桑那州图森市的蛋糕列表的黄页中爬行,那么如何产生一个URL请求激活规则 - 具体来说它是如何激活restrict_xpath属性的?

谢谢.

Eli*_*les 14

CrawlSpider指定如何从页面中提取链接以及应为这些链接调用哪些回调的rules属性.它们由parse()该类中实现的默认方法处理- 在此处查看源代码.

因此,每当您想要触发URL的规则时,您只需要生成一个scrapy.Request(url, self.parse),并且Scrapy引擎将向该URL发送请求并将规则应用于响应.

链接的提取(可能使用也可能不使用restrict_xpaths)由为该规则注册的LinkExtractor对象完成.它基本上搜索整个页面中的所有<a>s和<area>s元素,或者仅在应用restrict_xpaths表达式后获得的元素中搜索属性.

例:

例如,假设你有一个像这样的CrawlSpider:

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

class MySpider(CrawlSpider):
    start_urls = ['http://someurlhere.com']
    rules = (
        Rule(
            LinkExtractor(restrict_xpaths=[
                "//ul[@class='menu-categories']",
                "//ul[@class='menu-subcategories']"]),
            callback='parse'
        ),
        Rule(
            LinkExtractor(allow='/product.php?id=\d+'),
            callback='parse_product_page'
        ),
    )

    def parse_product_page(self, response):
        # yield product item here
Run Code Online (Sandbox Code Playgroud)

引擎开始向URL发送请求start_urls并执行默认回调(parse()CrawlSpider中的方法)以获取响应.

对于每个响应,parse()方法将在其上执行链接提取器以从页面获取链接.也就是说,它调用LinkExtractor.extract_links(response)每个响应对象来获取URL,然后生成scrapy.Request(url, <rule_callback>)对象.

示例代码是蜘蛛的骨架,它按照产品类别和子类别的链接抓取电子商务网站,以获取每个产品页面的链接.

对于在此蜘蛛中专门注册的规则,它将使用parse()方法作为回调(将触发为这些页面调用爬网规则)以及与之匹配的链接来抓取"类别"和"子类别"列表内的链接.product.php?id=\d+使用回调的正则表达式parse_product_page()- 最终会刮掉产品数据.

如你所见,非常强大的东西.=)

阅读更多: