这就是我在浏览器中看到的HTML
<li class="lvprice prc">
<span class="bold">
$72.95</span>
</li>
因此,我的XPath以获取价格;
prices = Selector(response).xpath('//*[@class = "lvprice prc"]')
for price in prices:
item['price'] = float(price.xpath('span[1]/text()').extract()[0].strip()[1:].replace(',',''))
它对某些URL不起作用,因此我查看了对它不起作用的反应。响应看起来像这样;
<li class="lvprice prc">
<span class="bold">
<b>ZAR</b> 2,656.74</span>
</li>
任何建议如何处理此建议
谢谢!(域是ebay.com)
在执行Ajax之前,这些价格真的在DOM中吗?
也许价格正在加载Ajax Call。
尝试在您的浏览器中禁用JS,然后查看该页面中的HTML。
顺便说一句,请使用此XPath选择与一个类的更多元素一起选择元素。
//*[contains(@class, 'class1') and contains(@class, 'class2')]
编辑:
我100%确定eBay由于来自同一IP的许多请求而显示验证码页面。请记住,eBay不是婴儿网站,它是一家非常大的公司,并且反对刮擦。他们阻止了刮擦它们的IP。
我还曾经刮过亚马逊,eBay和其他几个大网站,它们确实反对爬行。
这样做是为了查看价格不在您的响应中时的响应。
from scrapy.utils.response import open_in_browser
def parse_details(self, response):
try:
Selector(response).xpath('//*[@class = "lvprice prc"]').extract()[0]
except Exception:
open_in_browser(response)
这将打开操作系统默认浏览器中的刮擦页面。