python - 脚本无法从网页获取数据

标签 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,但也有同样的问题。

最佳答案

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

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

关于python - 脚本无法从网页获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54027532/

相关文章:

python - 查找图像中所有像素对之间的距离

Python pandas - 特定的合并/替换

python - 如何在 9 月到 5 月期间在 App Engine 中设置 python cron 作业

html - 缩短 "width: calc(... - (margin * 2))"

asp.net - Razor 代码去哪儿了?

python-3.x - 如何使用Python 3并行下载和解析HTML文件?

json - 在需要对象交互的站点上使用 XML HTTP 请求

python - Scrapy 结合文本和粗体

python - 如何替换 Pandas 数据框中字符串中的子字符串

javascript - IE8 仅在鼠标悬停在 <body> 之外时显示背景图像