beautifulsoup解析html标记异常
问题描述:
我从HTML文件中提取一些信息。但是,一些文件没有标签<p class="p p1"> date </p>
,它返回beautifulsoup解析html标记异常
AttributeError: 'NoneType' object has no attribute 'strip'
而且在一些文件的日期是不是在标签内。我发现一个是:
<time content="2005-11-11T19:09:08Z" itemprop="datePublished">
Nov. 11, 2005 2:09 PM ET
</time>
我该如何解决这两个问题?
我的代码:
month_list = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October','November', 'December', 'Jan', 'Feb', 'Aug', 'Oct', 'Dec']
def first_date_p():
for p in soup.find_all('p', {"class": "p p1"}):
for month in month_list:
if month in p.get_text():
first_date_p = p.get_text()
date_start = first_date_p.index(month)
date_text = first_date_p[date_start:]
return date_text
else:
#if the tag exist, but do not have date.
month = 'No Date/Error'
return month.strip()
答
如果要确保所选择的 'P' 标签总是包含一些文字,您可以将text
参数设置为True
,即:
soup.find_all('p', {"class": "p p1"}, text=True)
否则,如果你想得到所有的'p',即使它们不包含任何文本,你可以将None
转换为字符串,例如:
str(p.get_text()).strip()
关于你的第二个问题,您可以选择“时间”标签的“内容”属性,如:
soup.find('time').get('content')
在我看来,你应该寻找日期的特性开始,你希望适用于* all *的HTML文件。实际上,日期可能会有更多的格式,并且您需要分别处理每个格式。你有多少种不同的格式? –