python - Scrapy 请求返回错误的货币
问题描述
我试图从这个网站上获取信息。一切都很好,除了价格。在网站和 html 中,价格以美元列出。但是当我运行下面的代码时,它会以英镑返回。
price = response.xpath('//*[@id="page"]/div[2]/div/div[1]/div[2]/div/div[2]/div/p').extract()
我尝试了以下不同的变体:
headers = {
'USER_AGENT': "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
'Accept-Language': 'en-US,en;q=0.9',
}
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url=url, headers=headers, callback=self.parse, cookies={'hn.globale.currency': 'USD', 'hn.globale.country': 'US'})
但它总是以英镑的形式出现。我怎样才能改变它来获得美元?我也可以将产品数据作为 json 格式获取,但也都以 GBP 为单位。
解决方案
该页面全部使用 Javascript 动态构建并动态配置。如果您查看该页面,您会在左上角看到“USD”选项,但该文本不在源代码中。除非您在抓取时执行 Javascript,否则您无法获得转换。如果他们有 JSON API,则必须有一种配置方法,但他们必须告诉你。
推荐阅读
- c# - ApiControllerAttribute 和可选参数
- python - 如何在 Python 中继续运行循环
- pgadmin-4 - pgadmin4 更新到 4.11 版后坏了
- matlab - 如何使用 MATLAB 仅填充外壳的内部部分
- php - MYSQL 查询大于 AND 小于
- python - 如何将缩进格式的 json 读入字典
- python - 如何在给定该字符串的多个子字符串的情况下找到完整的字符串
- amazon-web-services - 寻找一种更好的方法来可视化 AWS 上的数据湖管道
- stack - 将一个堆栈/队列移动到另一个堆栈/队列的空间复杂度是多少?
- html - 伪类不会改变