Python新手技术问询:如何根据日期从父页面获取目标URL
Python新手网页抓取问题解决方案
嘿,作为Python新手能写出这些基础代码已经很棒啦!我来帮你把这些零散的步骤串起来,解决找到指定日期对应链接、整理数据的问题~
1. 先补全必要的导入
你的代码里没写导入语句,先把这些加上,不然运行会报错:
from urllib.request import urlopen import re from bs4 import BeautifulSoup
2. 关联指定日期与对应href链接
你现在是分别获取所有链接和匹配的日期,但没把它们关联起来。核心是找到包含目标日期的span标签,再定位到它对应的a标签(毕竟日期和链接通常在同一个区块里)。这里给你写了适配常见网页结构的代码:
url = "https://www.visitmonmouth.com/page.aspx?Id=5017" html = urlopen(url) soup = BeautifulSoup(html, 'html.parser') # 你要找的目标日期 target_date = '7/18/20:' # 找到所有包含该日期的span标签(对应你提到的span style标签) date_spans = soup.find_all('span', string=re.compile(target_date)) # 收集对应日期的链接 target_links = [] for span in date_spans: # 先尝试找包含这个span的a标签(比如日期是a标签的文本一部分) link = span.find_parent('a') if link and link.get('href'): target_links.append(link.get('href')) # 如果日期和a标签是同级关系,就找相邻的a标签 else: link = span.find_next_sibling('a') if link and link.get('href'): target_links.append(link.get('href')) print(f"找到对应日期的链接: {target_links}")
小技巧:如果不知道日期和a标签的结构,可以用print(span.prettify())打印span的完整HTML,这样就能清楚它们的层级关系,调整查找逻辑啦。
3. 将HTML数据转为字典结构
你说的“将HTML转为字典”,应该是把日期、链接和子站点数据整理成结构化的字典。这里可以把每个条目封装成字典,再存入列表,方便后续处理:
# 存储最终结构化数据的列表 result_list = [] for span in date_spans: item = {} # 提取干净的日期文本(去掉多余空格换行) item['date'] = span.get_text(strip=True) # 获取对应链接并处理相对路径 link = span.find_parent('a') or span.find_next_sibling('a') if link: href = link.get('href') # 把相对路径转成完整URL,避免无法访问 full_url = f"https://www.visitmonmouth.com{href}" if href.startswith('/') else href item['link'] = full_url # 调用你已有的子站点爬虫,把结果合并到字典里 # 假设你的爬虫函数叫crawl_subsite,返回子站点数据字典 # sub_site_data = crawl_subsite(full_url) # item.update(sub_site_data) result_list.append(item) # 打印整理好的字典数据 print("结构化后的结果:") for entry in result_list: print(entry)
4. 额外小提示
- 可以给
urlopen加上try-except异常处理,避免网页无法访问时程序直接崩溃。 - 如果目标日期有多个匹配结果,上面的代码会全部收集,你可以根据需求做进一步筛选。
内容的提问来源于stack exchange,提问作者orphyux
相关产品推荐
相关产品推荐

