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
相关产品推荐
相关产品推荐

