Scrapy提取ul/li列表数据返回结果异常问题求助
问题原因
你的CSS选择器循环范围写错了:
response.css('ul.rp-1qtpzi4')匹配的是包裹所有企业卡片的外层ul容器,整个页面只有1个该容器节点,所以循环只会执行1次,最终仅返回1条结果。- 直接把
get()换成getall()是在整个页面全局范围提取所有字段值,没有绑定到单个企业条目上,自然会出现数据排列混乱、字段和企业无法匹配的问题。
核心修复逻辑:先定位到每一家企业对应的独立列表条目,在单个条目的作用域内分别提取地址、名称、链接三个字段,就能保证每个企业的字段一一对应。
修正后代码
import scrapy class RynekMainSpider(scrapy.Spider): name = "RynekMain" start_urls = [ 'https://rynekpierwotny.pl/deweloperzy/?page=1', ] def parse(self, response): # 遍历ul下的每一个企业li条目 for company in response.css('ul.rp-1qtpzi4 > li'): link = company.css('li.rp-np9kb1 a::attr(href)').get() # 如需输出示例里的纯域名格式,可在这里对link做字符串截取处理 yield { 'address': company.css('address.rp-o9b83y::text').get(), 'name': company.css('h2.rp-69f2r4::text').get(), 'link': link }
补充说明
- 如果需要输出和示例完全一致的纯域名格式(不带http前缀、页面路径),拿到提取到的href值后,用字符串切片或者
urllib.parse模块提取域名部分即可。 - 后续如果要做多页爬取,只需要定位分页栏的下一页按钮地址,用
response.follow()回调parse方法就能实现自动翻页。
内容的提问来源于stack exchange,提问作者WaterWolf86
相关产品推荐
相关产品推荐

