【问题标题】:How to use Selenium to get different currencies from a website?如何使用 Selenium 从网站获取不同的货币?
【发布时间】:2020-02-21 14:40:10
【问题描述】:

我正在尝试在 python 中学习 Selenium,以便从以下网站(我位于欧洲以外)抓取欧元价格。如果我只是用漂亮的汤来解析 html,它总是会给我以美元为单位的价格。有人告诉我 Selenium 可以在显示时呈现 html 代码(这样我就可以刮取欧元价格),但不太确定该怎么做

我的代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
from bs4 import BeautifulSoup
import requests
import pandas as pd
import json

url = "https://www.colmar.it/en-gb/Man/Ski/Jackets/C352"

driver = webdriver.Chrome()
driver.implicitly_wait(30)
driver.get(url)

然后用 BeautifulSoup 遍历数据,代码如下:

soup = BeautifulSoup(driver.page_source, 'lxml')
price = []
for price_tag in soup.find_all('span', class_='product-preview__old-price'):
        price.append(price_tag.text)

由于我的位置在欧洲以外,它总是给我美元的价格:(

有没有办法获取我看到的html(当我将网站上的交付区域更改为欧洲时)?

编辑:我尝试将语言调整为法语,但仍然没有成功。完整代码如下。还有其他推荐吗?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
from bs4 import BeautifulSoup
import requests
import pandas as pd
import json

url = "https://www.colmar.it/en-gb/Man/Ski/Jackets/C352"

options = webdriver.ChromeOptions()
options.add_argument("--lang=fr");
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(30)
driver.get(url)

soup = BeautifulSoup(driver.page_source, 'lxml')
price = []
for price_tag in soup.find_all('span', class_='product-preview__old-price'):
        price.append(price_tag.text)

【问题讨论】:

  • 在执行获取价格之前调整您的脚本以更改国家/地区
  • 谢谢。有什么建议吗?
  • 查看这里的文档:selenium-python.readthedocs.io/navigating.html 您需要在屏幕/网页上找到元素,然后对它们执行click 事件。然后导航到您想要的页面并像以前一样阅读价格
  • 它使用 cookie usrIpCountry:"FR" 来设置国家和显示欧元。它从colmar.it//Assets/Colmar/json/productlist-en-gb.json 获取 JSON 格式的数据
  • 我在 Firefox/Chrome(标签Network)中使用DevTools 来查看从浏览器到服务器的所有请求。当我过滤为仅显示 XHR (AJAX) 请求时,我得到了这个 url,我可以看到它得到的响应 - 我在 JSON 中看到了 CurrencySymbol。使用 XHR (AJAX) 在页面上设置数据是一种流行的方法。在 DevTools 中,我还可以看到所有标题 - 即。 cookie - 当我在页面上更改国家/地区时查看它发送到服务器的内容 - 我看到带有 'FR` 的 cookie

标签: python selenium web-scraping beautifulsoup


【解决方案1】:

你可以尝试设置某个国家的cookie,试试:

url = "https://www.colmar.it/en-gb/Man/Ski/Jackets/C352"

driver = webdriver.Chrome()
driver.implicitly_wait(30)
driver.get(url)

# Delete current country cookie
driver.delete_cookie('usrIpCountry')
# Set a cookie with country France
driver.add_cookie({'name':'usrIpCountry', 'value':'France', 'domain': 'www.colmar.it'})

# Refresh before proceeding
driver.refresh()

soup = BeautifulSoup(driver.page_source, 'lxml')
price = []
for price_tag in soup.find_all('span', class_='product-preview__old-price'):
        price.append(price_tag.text)

这应该成功了。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 2014-12-07
    • 1970-01-01
    • 2017-06-29
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多