如何通过网络抓取从udemy网站查找价格?

时间:2020-05-20 04:06:00

标签: python web-scraping beautifulsoup

我正在使用漂亮的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>

2 个答案:

答案 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>

实际价格是多少: enter image description here