我正在使用漂亮的python汤包来查找课程价格。使用美丽的汤,我得到的是美元价格,当我将其转换为卢比时,价格就不同了。
price in udemy website : 700
price by beautiful soup : 13.99$
我试图通过计算不同的课程比率来找到逻辑,但是它没有用。 这是我的代码:
from bs4 import BeautifulSoup
import requests
page = requests.get('https://www.udemy.com/course/python-data-science-machine-learning-bootcamp/')
soup = BeautifulSoup(page.content, 'html.parser')
for sp in soup.find_all('span',class_='price-text__current'):
print(sp)
我得到这个输出:
<span class="price-text__current" data-purpose="discount-price-text">
<span class="sr-only">Current price:</span> $13.99
</span>
</span>
答案 0 :(得分:1)
您必须随请求发送headers
:
from bs4 import BeautifulSoup
import requests
# For French people:
hd = {'Accept-Language': 'fr,fr-FR'}
page = requests.get('https://www.udemy.com/course/python-data-science-machine-learning-bootcamp/',
headers = hd)
soup = BeautifulSoup(page.content, 'html.parser')
for sp in soup.find_all('span',class_='price-text__current'):
print(sp)
# For US people:
hd = {'Accept-Language': 'en,en-US'}
page = requests.get('https://www.udemy.com/course/python-data-science-machine-learning-bootcamp/',
headers = hd)
soup = BeautifulSoup(page.content, 'html.parser')
for sp in soup.find_all('span',class_='price-text__current'):
print(sp)
输出:
<span class="price-text__current" data-purpose="discount-price-text">
<span class="sr-only">Prix actuel :</span> 15,99 €
</span>
<span class="price-text__current" data-purpose="discount-price-text">
<span class="sr-only">Current price:</span> €12.99
</span>
但是请注意,在请求之后,响应似乎有所不同。该网站可能正在服务器端跟踪您。您还必须使用标题来获取所需的值。
答案 1 :(得分:0)
在udemy网站中,它会自动跟踪您的位置,从而为您提供以卢比为单位的价格。因此,在请求中,URL从IP_Address跟踪您的位置,如果您使用VPN,则会产生不同的结果。
就像@pyOliv所说的那样,当您使用Accept-Language
时,实际上并没有设置请求的位置,而是必须使用接收数据的语言。
因此,如果您从印度提出要求,您将得到:
<span class="price-text__current" data-purpose="discount-price-text">
<span class="sr-only">Current price:</span> ₹385
</span>