scrapy:返回某个单词出现的相对网址列表

问题描述 投票:0回答:1

在这个网站上,有许多卡片可以在网站的多个区域访问。我正在尝试抓取网站以根据标题返回其所有实例(以其网址的形式)。例如,标题为“AZ 学校安全计划”的卡片可在以下位置找到: https://lawforkids.org/officers & https://lawforkids.org/educators 。我的目标是让 scrapy 为我做这件事,而不是手动查找每个实例。

import scrapy

class PostsSpider(scrapy.Spider):

name = "card"

start_urls = [ 'https://lawforkids.org/',]

def parse(self, response):

for card in response.css('h5.card-title::text').re(r'AZ School Safety Program'): 
yield{
'url': card.css('base::attr(href)').getall()
}

除了不确定 url 选择器是否正确之外,我尝试抓取的结果是: PostsSpider.parse 回调未定义。非常感谢任何见解,谢谢!

python scrapy
1个回答
0
投票

尝试这个方法:

def parse(self, response):
    xp = "//div[@class='card-body']"
    for card in responser.xpath(xp):
        title = card.xpath("normalize-space(./h5[@class='card-title'])").get()
        href = card.xpath(".//a[@class='card-link']/@href").get()
        if href != None:
            href  = response.urljoin(href)
            response.meta['title'] = title
            yield scrapy.Request(href, callback=self.cardpage, meta=response.meta)

def cardpage(self, response):
    print (response.meta['title'])

尝试单独处理各个标题/页面,这应该有助于将来的处理!

© www.soinside.com 2019 - 2024. All rights reserved.