使用 python 3.5 从静态 HTML 文件中提取数据
Posted
技术标签:
【中文标题】使用 python 3.5 从静态 HTML 文件中提取数据【英文标题】:Extract data from STATIC HTML FILE using python 3.5 【发布时间】:2017-05-17 02:56:53 【问题描述】:我在本地机器上保存了静态 html 页面。我尝试使用简单的文件打开和 BeautifulSoup。打开文件时,由于 unicode 错误,它不会读取整个 html 文件,而 BeautifulSoup 它适用于实时网站。
#with beautifulSoup
from bs4 import BeautifulSoup
import urllib.request
url="Stack Overflow.html"
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page.read())
universities=soup.find_all('a',class_='institution')
for university in universities:
print(university['href']+","+university.string)
#Simple file read
with open('Stack Overflow.html', encoding='utf-8') as f:
for line in f:
print(repr(line))
阅读 HTML 后,我希望从 ul
和 li
中提取没有任何属性的数据。欢迎任何建议。
【问题讨论】:
您遇到了哪些错误?您究竟想从页面中提取什么?发布 HTML 内容(相关部分)和您想要的输出。 问题已解决,感谢大家的帮助!! 【参考方案1】:我不知道你到底是什么意思。我只是了解您想从本地存储中读取整个 html 数据并使用 bs4
解析一些 DOM。
对吗?
我在这里建议一些代码:
from bs4 import BeautifulSoup
with open("Stack Overflow.html", encoding="utf-8") as f:
data = f.read()
soup = BeautifulSoup(data, 'html.parser')
# universities = soup.find_all('a', class_='institution')
# for university in universities:
# print(university['href'] + "," + university.string)
ul_list = soup.select("ul")
for ul in ul_list:
if not ul.attrs:
for li in ul.select("li"):
if not li.attrs:
print(li.get_text().strip())
【讨论】:
是的,我的机器上有一个 HTML 文件,我希望解析和提取列表标签之间的值,该标签没有 BS4 的任何属性 如何从标签示例中提取值 文本文件的内容: ,它没有值 @user73324 我修改了一些代码。请再次查看代码。但我不确定你到底想要什么。如果该代码有误,请让我看一些本地 html 示例并输出您期望的内容。 我尝试运行它但没有返回任何值: 依赖检查版本:1.4.3 报告生成时间:2016 年 12 月 30 日 13:33:27 UTC 扫描的依赖项: 0(0 个唯一) 易受攻击的依赖项: 0 发现漏洞: 0 漏洞抑制: 0 ... with open('dependency-check-report.html', encoding='utf-8') as f: data = f.read() soup = BeautifulSoup(data, 'html.parser' ) li_list = soup.select("li") for li in li_list: if not li.attrs: for i in li.select("li"): if not i.attrs: print(i.get_text().strip( ))【参考方案2】:这个问题是关于如何构造一个 BeautifulSoup 对象。
要解析文档,请将其传递给 BeautifulSoup 构造函数。你 可以传入一个字符串或一个打开的文件句柄:
from bs4 import BeautifulSoup soup = BeautifulSoup(open("index.html")) soup = BeautifulSoup("<html>data</html>")
给BeautifulSoup传递一个文件对象即可,不需要专门添加编码信息,BS会处理。
首先,将文档转换为 Unicode,然后将 HTML 实体转换为 转换为 Unicode 字符:
如果您在提取数据时遇到问题,您应该发布 html 代码。
摘录:
import bs4
html = '''<ul class="indent"> <li><i>dependency-check version</i>: 1.4.3</li> <li><i>Report Generated On</i>: Dec 30, 2016 at 13:33:27 UTC</li> <li><i>Dependencies Scanned</i>: 0 (0 unique)</li> <li><i>Vulnerable Dependencies</i>: 0</li> <li><i>Vulnerabilities Found</i>: 0</li> <li><i>Vulnerabilities Suppressed</i>: 0</li> <li class="scaninfo">...</li>'''
soup = bs4.BeautifulSoup(html, 'lxml')
for i in soup.find_all('li', class_=False):
print(i.text)
出来:
dependency-check version: 1.4.3
Report Generated On: Dec 30, 2016 at 13:33:27 UTC
Dependencies Scanned: 0 (0 unique)
Vulnerable Dependencies: 0
Vulnerabilities Found: 0
Vulnerabilities Suppressed: 0
【讨论】:
依赖检查版本:1.4.3 报告生成时间:2016 年 12 月 30 日 13:33:27 UTC 扫描的依赖项: 0(0 个唯一) 易受攻击的依赖项: 0 发现漏洞: 0 漏洞被抑制: 0 ... with open('C:/dependency-check-report.html') as f: data = f.read() soup = BeautifulSoup(data, 'html.parser') li_list = soup. select('li') for li_list: dat = li.get_text() if dat.find(pairKeynameNumVulnDependencies) != -1: numVulnDependencies = re.findall(r'([0-9])', dat) if int(numVulnDependencies[0]) > 0: print("No") else: print("Go")以上是关于使用 python 3.5 从静态 HTML 文件中提取数据的主要内容,如果未能解决你的问题,请参考以下文章