如何使用BeautifulSoup从Python网页抓取特定文本?

时间:2014-09-16 10:00:50

标签: python web-scraping beautifulsoup

我想快速从www.xoom.com获取当天的汇率

这是我到目前为止所做的:

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.xoom.com')
data = r.text
soup = BeautifulSoup(data)

接下来,在查看该网页的源代码后,我知道这里提到了汇率:

<p class="xcma-fx-rate">Current locked-in exchange rate* <em class="fx-rate">1 USD = 60.1500 INR</em></p>

我尝试了几件事:

soup.find_all('div class')

但它给了我一个空数组:[]

我如何降低汇率?

3 个答案:

答案 0 :(得分:1)

试试这个:

text_rate = soup.find('em',attrs={'class':'fx-rate'}).getText()

此外,使用lmxl,假设元素确实在页面上,您可以通过此代码获得费率:

import requests
import lxml.html

r = requests.get('https://www.xoom.com/india/send-money')
data = r.text

tree = lxml.html.fromstring(data)

rate = tree.xpath("//em[@class='fx-rate']")

print rate[0].text_content()

打印1 USD = 60.1500 INR

答案 1 :(得分:0)

首先,我抓错了页面。

因为我已多次打开该网站,当我在浏览器中打开它时,它会自动向我显示一个“印度”网站。在主页地址的汇率页面(检查我的机器中存储的一些cookie后我猜)。但是,当我使用Python获取时,这不会发生。所以我需要明确说明要获取的正确页面。这是提到费率的地方:xoom.com/india/send-money

现在正确的代码是:

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.xoom.com/india/send-money')
data = r.text
soup = BeautifulSoup(data)

for rate in soup.find_all('em'):
    print rate.text

答案 2 :(得分:0)

我也在抓取时尝试使用提供的代码,我想我找到了该代码的解决方案:

如果需要,您可以替换链接:

import requests
import lxml.html

r = requests.get('https://www.xoom.com/philippines/send-money')
data = r.text
tree = lxml.html.fromstring(data)
rate = tree.xpath("//div[@class='js-exchange-rate']")

rate[0].text_content()

我正在使用Python 3.8和Anaconda

结果是:

' 1 USD = 49.1238 PHP* '