如何通过Python网络爬虫提取网页中的datetime对象?
爬虫提取发布时间问题的解决方法
问题原因
你代码里用release.find('time', class_='')指定了空class,但目标网站的<time>标签要么带有具体class属性,要么你的查找路径不对,导致找不到对应标签,调用.get('datetime')就会返回None。
具体修正步骤
- 先定位真实标签结构:在循环里打印当前
article的完整HTML,确认<time>标签的位置和属性:for release in releases: print(release.find('a', class_="title").get_text()) # 打印article的HTML结构,找到time标签的真实状态 print(release.prettify()) - 调整time标签的查找逻辑:
- 如果
<time>有具体class(比如entry-date),直接指定正确class:print(release.find('time', class_='entry-date').get('datetime')) - 如果
<time>没有class,去掉class_=''参数,直接查找标签:print(release.find('time').get('datetime')) - 如果
<time>嵌套在其他标签内(比如<div class="post-meta">),先找父标签再定位time:meta_box = release.find('div', class_='post-meta') if meta_box: print(meta_box.find('time').get('datetime'))
- 如果
- 增加异常处理:避免找不到标签导致程序崩溃,让代码更健壮:
for release in releases: title_tag = release.find('a', class_="title") print(title_tag.get_text().strip() if title_tag else "未找到标题") time_tag = release.find('time') if time_tag: print(time_tag.get('datetime') if time_tag.has_attr('datetime') else "无datetime属性") else: print("未找到发布时间标签")
完整修正代码
import requests from bs4 import BeautifulSoup import datetime url = "https://www.invisibleoranges.com/" response = requests.get(url) html = response.content soup = BeautifulSoup(html, 'html.parser') releases = soup.find_all('article') # 去掉空class,直接匹配所有article标签 for release in releases: # 提取标题 title_elem = release.find('a', class_="title") if title_elem: print(f"标题:{title_elem.get_text().strip()}") # 提取并转换发布时间 time_elem = release.find('time') if time_elem and time_elem.has_attr('datetime'): dt_str = time_elem['datetime'] # 转换为datetime对象 dt = datetime.datetime.fromisoformat(dt_str) print(f"发布时间:{dt}\n") else: print("发布时间:未获取到\n")
内容的提问来源于stack exchange,提问作者Piotr Kulak
相关产品推荐
相关产品推荐

