在这个网站上,有许多卡片可以在网站的多个区域访问。我正在尝试抓取网站以根据标题返回其所有实例(以其网址的形式)。例如,标题为“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 回调未定义。非常感谢任何见解,谢谢!
尝试这个方法:
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'])
尝试单独处理各个标题/页面,这应该有助于将来的处理!