脚本无法从网页获取数据

时间:2019-01-03 18:04:33

标签: python html web-scraping python-requests lxml

我试图用Python编写一个程序,该程序可以采用股票名称及其价格并打印出来。但是,当我运行它时,什么也不会打印。从网站获取数据似乎有问题。我再次检查了网页中的路径是否正确,但是由于某些原因,文本不想显示。

from lxml import html
import requests
page = requests.get('https://www.bloomberg.com/quote/UKX:IND?in_source=topQuotes')
tree = html.fromstring(page.content)
Prices = tree.xpath('//span[@class="priceText__1853e8a5"]/text()')
print ('Prices:' , Prices)

here is the website I am trying to get the data from

我尝试过BeautifulSoup,但是它有同样的问题。

1 个答案:

答案 0 :(得分:0)

如果打印字符串page.content,您会看到它捕获的网站代码实际上是用于验证码测试的,而不是您手动访问网站时看到的“真实”目标页面本身。该网站似乎足够聪明,可以看到您对此URL的请求是来自脚本的,而不是来自人工的,并且有效地阻止了您的脚本抓取任何真实内容。因此Prices为空,因为在此特殊的验证码页面上根本没有类"priceText__1853e8a5"的span标签。当我尝试使用urllib2进行刮擦时,我得到的也是一样。

正如其他人所建议的那样,Selenium(实际的Web自动化)也许能够启动页面并为您提供所需的信息。该ID看起来是动态生成的,尽管当我手动查看页面时确实得到了相同的ID。另一种选择是简单地找到一个不同的站点,该站点可以在不阻止脚本的情况下为您提供所需的报价。我用https://tradingeconomics.com/ukx:ind尝试过,而且行得通。当然,您当然需要一个不同的xpath来找到所需的单元格。