You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy爬虫运行时无法跟进跳转链接抓取目标页面数据如何解决?

问题排查与修复方案
  • 核心错误为商家链接的CSS选择器拼写错误:parse方法中使用的a.businesss-name多了1个字母s,页面实际商家链接的类名为business-name,该拼写错误导致无法匹配到任何待跟进的链接,自然不会触发后续的详情页抓取逻辑。
  • 次要问题为转义字符冗余:起始URL中的&属于HTML转义字符,直接替换为&即可正常传递请求参数;CSS选择器中的>无需转义,直接写>即可正常识别子节点选择逻辑。
  • 可选优化:抓取到的邮箱默认带mailto:前缀,如需纯邮箱地址可对email字段的值做字符串切割处理。

修复后完整代码如下:

import scrapy
from ..items import YellowpagesItem

class YSpider(scrapy.Spider):
    name = 'yp2'
    allowed_domains = ['yellowpages.com']
    start_urls = [
        'https://www.yellowpages.com/search?search_terms=pizza&geo_location_terms=Conshohocken%2C+PA'
    ]

    def parse(self, response):
        for link in response.css('a.business-name'):
            yield response.follow(link.attrib.get('href'), callback=self.parse_business)

    def parse_business(self, response):
        item = YellowpagesItem()
        item['name'] = response.css('h1::text').get()
        item['phone'] = response.css('p.phone::text').get()
        item['street'] = response.css('h2 > span::text').get()
        item['city_state'] = response.css('div.contact > h2.address::text').get()
        item['tags'] = ','.join([item.get() for item in response.css('p.cats > a::text')])
        # 如需去除mailto前缀可以用下面的写法
        # item['email'] = response.css('a.email-business').attrib.get('href', '').replace('mailto:', '')
        item['email'] = response.css('a.email-business').attrib.get('href')
        yield item

内容的提问来源于stack exchange,提问作者owend23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:27:03