python - 使用 BeatifulSoup Python 仅从 HTML 文件中提取文本
问题描述
我有一个小问题。这是我的html文件:
<div class="titreArticle">
<p class="titreArticleVisu rdp__articletitle">Analysis of proposed SBP Amendment Act</p>
</div>
使用 beautifusoup,我想探索我的文件以便在标签中获取一些文本。
这是我在 Python 中的代码:
from bs4 import BeautifulSoup
import re
import calendar
import locale
from lxml import etree
import string
mess = "Entrez le chemin vers le fichier HTML Europress : "
html_source = "/Users/alancuzon/Desktop/test.HTML"
html = open(html_source, "r")
content = html.read()
soup = BeautifulSoup(content, "lxml")
#soup.find_all('span', class_='apd-sources-date', text=True)
exported_articles = []
articles = soup.findAll("article")
for a in articles:
article = {}
journal_title = a.find("span", {"class", "DocPublicationName"}).text
article["journal"] = journal_title
article_date = a.find("span", {"class", "DocHeader"}).text
article["date"] = article_date
exported_articles.append(article)
但是当我想获取示例标签的文本时出现错误。我的错误:
AttributeError Traceback (most recent call last)
<ipython-input-74-ff7c57861c92> in <module>
23 article["journal"] = journal_title
24
---> 25 article_date = a.find("span", {"class", "DocHeader"}).text
26 article["date"] = article_date
27
AttributeError: 'NoneType' object has no attribute 'text'
当我删除 .text 时,我只有 html 的字符串。你知道如何解决吗?为了只保留字符串?非常感谢!
解决方案
这ArributeError
是由前一个选择器返回引起的None
。我认为这可能是因为您没有使用正确的选择器按类名查找元素。
您正在使用:
{"class", "DocHeader"}
根据文档,它应该是
attrs={"class": "DocHeader"}
或者
class_="DocHeader"
尝试使用
for a in articles:
article = {}
journal_title = a.find("span", attrs={"class": "DocPublicationName"}).text
article["journal"] = journal_title
article_date = a.find("span", attrs={"class": "DocHeader"}).text
article["date"] = article_date
exported_articles.append(article)
如果这更容易,您还可以使用 css 选择器:
a.select_one(".DocHeader")
如果仍然得到None
,则表示所选元素不存在 - 仔细检查类名是否正确。
推荐阅读
- python - 使用 input() 创建一个程序以在 python 中绘制 excel 数据以选择文件
- mysql - MySQL查询返回错误的行数?
- python - 如何将字符串转换为日期格式
- r - 用其他列中匹配类别的同一数据表中的值替换 NA
- active-directory - Active Directory LDAP 上的 baseDN 问题,找不到对象
- android - Android 生物识别 API 未使用人脸识别解锁
- spring - Spring WebSocket 抛出 MessageDeliveryException 原因:java.lang.UnsupportedOperationException:null
- android - 无法识别的运算符 abs
- python - Python 3.8.5 和带有多播的套接字给出 [WinError 10022] 在 Python 3.8.3 正常工作时提供了无效参数
- matlab - Matlab scatterhist在直方图侧添加百分比