Python爬取网页筛选今日日期并存入DataFrame的问题求解
实现方案
原代码问题说明
- 类型不匹配:你获取的
now是带时分秒的datetime类型,而从页面提取存入date_today的是仅保留年月日的date类型,二者直接判等永远不成立 - 逐次创建DataFrame会覆盖历史匹配结果,无法同时保留所有符合条件的日期
- 没有处理无今日日期的空值场景,直接创建DataFrame可能报错
修正后完整代码
import datetime import requests from bs4 import BeautifulSoup import pandas as pd import datetime as dt url = "https://www.sbp.org.pk/ecodata/index2.asp" r = requests.get(url) htmlContent = r.content soup = BeautifulSoup(htmlContent, 'html.parser') # 统一转成date类型,避免类型不匹配 today = dt.datetime.today().date() data = [] for c in soup.find_all("td"): data.append(c.text.strip()) # 提取页面所有有效日期 page_dates = [] for _ in data: try: data_date = dt.datetime.strptime(_, '%b %d, %Y') page_dates.append(data_date.date()) except ValueError: continue # 筛选出所有等于今日的日期 today_matched = [d for d in page_dates if d == today] # 存入DataFrame if today_matched: df = pd.DataFrame({'update_date': today_matched}) print("匹配到今日更新日期,DataFrame如下:") print(df) else: print("no update") # 无匹配时也可以创建空DataFrame避免后续调用报错 df = pd.DataFrame(columns=['update_date'])
额外优化说明
如果你需要同时保存日期对应的页面其他字段内容,可以在提取日期的时候同步保存关联的td内容,不需要单独只存日期列表,后续筛选的时候可以同时带出对应的业务数据。
内容的提问来源于stack exchange,提问作者Zohair Ahmed
相关产品推荐
相关产品推荐

