网页抓取蟒蛇与<span>ID的



我想在给定网站的<span/>属性中使用BeautifulSoup删除数据。您可以在其位置的屏幕截图上看到。但是,我正在使用的代码只是返回一个空列表。我找不到我想要的列表中的数据。我在做什么错?

from bs4 import BeautifulSoup
from urllib import request
url = "http://144.122.167.229"
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
data = opener.open(url).read()
soup = BeautifulSoup(data, 'html.parser')
your_data = list()
for line in soup.findAll('span', attrs={'id': 'mc1_legend_value'}):
    your_data.append(line.text)
for line in soup.findAll('span'):
    your_data.append(line.text)

屏幕截图:https://i.stack.imgur.com/0mdil.jpg

谢谢。

屏幕截图的仪表板在我看来就像javaScript生成的东西一样。如果您在页面源中找不到标签,则意味着以后通过某些JavaScript代码添加了标签,或者您的浏览器试图修复某些被认为是断裂或不合适的HTML。

请记住,现在您正在向服务器发送请求,并为您提供平原HTML的返回。浏览器将解析HTML并执行任何JavaScript代码,如果找到任何内容。就您而言,美丽的汤或Urllib不会执行任何JavaScript代码。Urllib获取HTML和美丽的汤,使解析和提取相关信息变得更加容易。

如果您想从该标签中获取价值,我建议使用无头浏览器渲染您的页面,然后在解析之后,它是通过美丽的汤或任何其他解析器的HTML。

尝试硒:http://selenium-python.readthedocs.io/。您可以通过编程方式控制自己的浏览器。您可以使其为您要求页面,渲染,将新的HTML保存在变量中,使用Beautifoul汤来解析并提取您感兴趣的价值。我相信它已经实现了自己可以使用的解析器直接搜索该标签。或者甚至甚至是刮擦的飞溅:https://github.com/scrapinghub/splash

如果仪表板实时与服务器通信,并且该值是从服务器连续接收的,则可以查看发送哪些请求到服务器以获取该值。在"网络"选项卡下查看开发人员控制台。按F12打开开发人员控制台,然后单击Network。刷新页面,您应该将所有请求与响应一起发送给服务器。JavaScript发送的请求通常是XMLHTTPRequests。单击" Network"选项卡中的XHR以过滤所有其他请求。(这些是Google Chrome的说明。Firefox可能有些不同(。

最新更新