为什么 Python 响应选择器只能获取部分实际元素

why python response selectors can only get part of the actual elements

提问人:sampan0423 提问时间:5/17/2021 更新时间:5/18/2021 访问量:38

问:

我正在使用 python scrapy,尝试在页面上获取 car-name:

https://youjia.baidu.com/view/carDatabase?title=%E7%8E%B0%E4%BB%A3&key=code&val=174&sa=pc_growth_1

但是当我使用以下方法时

len(response.css('p.car-name::text').getall())

我只能从实际的 25 个元素中得到 46 个。 我已经仔细检查了页面源代码,并使用了 selenium 中间件。 为什么?有人知道线索吗?

完整的来源放在这里

https://github.com/sampan0423/youjia1
python ajax scrapy 客户端

评论

0赞 Harun Yilmaz 5/17/2021
它可能是关于滚动时加载新项目。当您第一次打开页面时,它会加载 25 个页面,但根据您的屏幕尺寸,它会开始加载新的页面。抓取可能无法获得新项目。如果您使用的是 Chrome(或类似工具),则可以通过开发者控制台的选项卡检查请求。infinite scrollNetwork -> XHR
0赞 Harun Yilmaz 5/17/2021
您还可以使用指向 API 的直接 URL。例如,您可以修改参数(可能的结果编号)以JSON形式获得尽可能多的结果。https://youjia.baidu.com/conditionsearch?token=1_526c1239fc0b0512a2bd13ac6b962f5f&sort=4&brand=174&level=&country=&price=&rn=50rn
0赞 sampan0423 5/17/2021
@HarunYilmaz是的,你的答案非常好。但我不知道如何使用它们。“无限滚动”和“直接URL”对我来说是相当新的。我正在使用 Scrapy 框架。出于这个原因,也许我可以将“无限滚动”集成到 scrapy 中。
0赞 sampan0423 5/17/2021
是的,你的答案非常好。但我不知道如何使用它们。“无限滚动”和“直接URL”对我来说是相当新的。“直接 URL”似乎是一个纯 JSON 文件,对吧?我需要了解更多信息才能获得提取所需信息的方法。在不同品牌之间,令牌/排序不会改变,因此这可能是一种更简单的方法。另一方面,我正在使用 Scrapy 框架。出于这个原因,也许我可以将“无限滚动”集成到 scrapy 中。我已经搜索过了,也许我需要使用硒在页面上做一些scroll_down。@Harun 伊尔马兹

答:

0赞 Dr Pi 5/18/2021 #1

sampan,你可以用 Scrapy 编写代码来处理更多的负载,你不需要 Selenium。

前提是您可以继续通过 API 访问 JSON

看上一篇文章: Scrapy Extract ld+JSON