完成Scrapy noob和成功地通过教程后,我试图在网站上刮一个页面,我正在收集数据以进行进一步分析,但我试图使用的xpath不断刮取什么也没有返回。我唯一能告诉你的不同之处是文本/URL在页面上的Flex框中。我已经尝试了每一个迭代,似乎工作在元素搜索栏和什么都没有。我是否缺少一个函数来允许访问flexbox中的这些行?
我正在抓取的页面的URL:https://partsmasterusa.com/product-category/crown/page/2/
我在粗糙的shell中尝试过的XPath示例没有提供任何结果:
response.xpath('//div[@id="main"]/div/div/div/div/main/div[@class="archive-products"]//div[@class="product-content"]/a/text()').get()
response.xpath('//div[@id="main"]/div/div/div/div/main/div[@class="archive-products"]//div[@class="product-content"]/a/text()').extract_first()
response.xpath('//li[contains(@class, "product-col")]//a[@href]/text()').extract_first()
etc etc
一个XPath响应的示例,它返回了我所期望的结果:
response.xpath('//div//a/span/text()').extract_first()
TIA
1条答案
按热度按时间bnlyeluc1#
这个网站有点棘手。这是一个wordpress网站,所以它不是完全动态的,但是在每个页面上呈现的产品是 AJAX 调用加载的。因此,当您尝试提取时,您可能试图从网站中提取的内容并不存在。
你可以做的是复制页面触发的POST请求,以便通过浏览器开发工具的网络选项卡将所有产品加载到页面上。
在调查之后,您会发现它向https://partsmasterusa.com/product-category/crown/page/{page_number_here}/?count=36发出请求。通过复制这个url和请求头以及在请求体中发送的字段和值,您可以通过这种方式获得所有产品及其信息。
例如:
部分输出: