当前位置: 首页 > 面试题库 >

了解CrawlSpider中如何使用规则

戚衡
2023-03-14
问题内容

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

如果我有一条规则要在列表中进行爬网,那么产生URL请求如何激活该规则-特别是它如何激活strict_xpath属性?


问题答案:

rules属性CrawlSpider指定如何从页面提取链接以及应为这些链接调用哪些回调。它们由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

引擎开始将请求发送到url中,start_urls并执行默认的回调(parse()CrawlSpider中的方法)以响应它们。

对于每个响应,parse()方法将在其上执行链接提取程序,以从页面获取链接。即,它LinkExtractor.extract_links(response)为每个响应对象调用以获得URL,然后产生scrapy.Request(url, <rule_callback>)对象。

该示例代码是spider的框架,该spider在产品类别和子类别的链接之后爬网电子商务网站,以获取每个产品页面的链接。

对于专门在此spider中注册的规则,它将使用parse()回调方法对“类别”和“子类别”列表内的链接进行爬网(这将触发针对这些页面的抓取规则),以及与product.php?id=\d+带有回调的正则表达式parse_product_page()-最终将抓取产品数据。



 类似资料:
  • 问题内容: 我想抓取页面,然后转到下一个链接,如下所示: scrapy能够解释该脚本的javascript代码吗? 通过livehttpheaders扩展,我发现单击Next会生成一个带有大量“垃圾”的POST,如下所示: 我正在尝试在类上构建我的Spider ,但是我无法真正弄清楚如何编写代码,因为我使用该方法来处理第一个URL(碰巧是登录表单),我在其中进行了POST: 然后我定义了commi

  • 问题内容: 此GridLayout将在我的具有很多级别的应用程序中使用。每个级别具有不同数量的行和列。我认为,最好使用GridLayout满足我的需求。同样,所有这些都需要在运行时按比例完成。 我在理解如何使用时遇到了麻烦。我正在尝试遵循这个出色的例子,但无法完全掌握它。比方说,例如,我想要一个3列4行的GridLayout。 在上面的链接示例中,他使用了如下代码来设置。 我也不理解这些变量的参数

  • 使用本主题了解 CSS 规则、选择器、继承等 CSS 基本概念。此外,还可了解在 Dreamweaver 中如何才能将 CSS 与网页关联。 关于层叠样式表 层叠样式表 (CSS) 是一组格式设置规则,用于控制网页内容的外观。通过使用 CSS 样式设置页面的格式,可将页面的内容与表示形式分离开。页面内容(即 HTML 代码)存放在 HTML 文件中,而用于定义代码表示形式的 CSS 规则存放在另一

  • 使用“关键字”面板可以创建并对文件应用 Adobe Bridge 关键字。可以将关键字组织成由父关键字和子关键字(称为子关键字)。使用关键字,您可以根据文件内容识别文件。例如,您可以使用筛选器面板来查看某一文件夹中共享某些关键字的所有文件,也可以使用“查找”命令来查找包含指定关键字的文件。 有关详细信息,请参阅嵌入式层次结构关键字 | Adobe Bridge。 创建新关键字和子关键字 在关键字面

  • 我有这个档案 我读了这个文件,下面是代码: 但是当我检查df_congomines_crs84_geo的财产时, 我得到了“{'init':'epsg:4326'}”,我不明白为什么我没有得到正确的crs。(第一项质询) 之后,我读取了同一区域的另一个数据集(两个数据都属于刚果) 此数据集的crs等于{'init':'epsg:4326'}。当我绘制两个数据集时(不改变crs), 我得到了下一张图

  • 了解如何在 Illustrator 中使用 MacBook Pro Touch Bar。 Illustrator 可以支持 Touch Bar 这个位于新一代 MacBook Pro 键盘顶端的多点触控显示屏。利用 Touch Bar,您可以根据主屏幕上的当前任务,访问 Illustrator 的相关功能和控件。Touch Bar 支持一些常用手势,如点按、拖动和滑动。 注意:有关 Touch B

  • 了解如何在 Photoshop 中使用 MacBook Pro Touch Bar。 Photoshop 可以支持 Touch Bar 这个位于新一代 MacBook Pro 键盘顶端的多点触控显示屏。利用 Touch Bar,您可以根据主屏幕上的当前任务,访问 Photoshop 的相关功能和控件。Touch Bar 支持一些常用手势,如点按、拖动和滑动。 在目前看来,Photoshop 对 T

  • 有时候也想要一个任务的行为是基于已经定义好的取值范围或者特定规则, 下面的例子就提供了一种很直观漂亮的方式: 例子 15.25. 任务规则 build.gradle tasks.addRule("Pattern: ping<ID>") { String taskName -> if (taskName.startsWith("ping")) { task(taskName)