链接类别名称上的Scrapy回呼条件

ht4b089n  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(151)

我是Scrapy的新手,我正在尝试构建一个爬虫,它根据标签的类名来解析响应。()根据URL定义回调函数,使用allow和deny,但这对我来说不起作用。起作用的是,如果标记具有特定的类名(比如“item”),它应该转到回调parse_item()。
我试图实现的是,我的爬虫访问所有网站链接从一个基本的URL,并根据类名的标签,它应该存储的数据。
于是说:

  • 基本URL = example.com
  • 在此基本URL上有2个链接:和
  • 爬行器应该访问这两个URL并在其中查找其他链接,但只查找class=“item”的链接,我想实际存储该页面的HTML。

LinkExtractor()有一个函数process_values(),用于处理attr()的值,但我不知道如何才能做到这一点,我尝试了以下方法:

class NewSpider(CrawlSpider):
    name = 'newspider'

    start_urls = ['https://example.com']

    allowed_domains = ['example.com']

    rules = (
        Rule(LinkExtractor(attrs=('class',), process_value=(lambda x: True if (x == 'class_name') else False)), callback="parse_items"),)
    )

    def parse_items(self, response):
        # store data
pftdvrlh

pftdvrlh1#

如果你想回调parse_xxx if tag是xxx,你应该传递一个参数给默认的parse方法来定义回调函数,我以前写过一个spider来解析一个spider中的多个域。例如:

def google(response):
    title = response.xpath('//title/text()')
    yield title

Class TestSpider(spiders.Spider):
    def start_requests(self):
        yield Request(url='https://www.google.com', cb_kwargs={'parse_func':google})

    def parse(self, response, parse_func):
        parse_result = parse_func(response):
        for item in pares_result:
            yield item

相关问题