了解CrawlSpider中如何使用规则
我是使用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, Rulefrom 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()
-最终将抓取产品数据。
以上是 了解CrawlSpider中如何使用规则 的全部内容, 来源链接: utcz.com/qa/419827.html