Python用BeautifulSoup爬取去重年份链接及lxml报错解决
年份链接列表去重
你可以根据是否需要保留爬取顺序选两种方案:
- 无需保留顺序:直接对原始append得到的列表做集合去重,一行代码即可实现:
unique_year_links = list(set(raw_year_links)) - 需要保留爬取的先后顺序:每次加入列表前做存在性判断,避免重复写入:
unique_year_links = [] for link in crawled_year_links: if link not in unique_year_links: unique_year_links.append(link)
采集含"apofasi"标识的案件链接
遍历去重后的年份链接,逐页解析提取符合要求的链接即可,参考代码片段如下:
import requests from bs4 import BeautifulSoup # 站点根域名,用于拼接相对路径链接 BASE_SITE_URL = "https://www.epant.gr" total_case_links = [] # 自定义请求头,避免被站点反爬拦截 REQUEST_HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } for year_link in unique_year_links: page_resp = requests.get(year_link, headers=REQUEST_HEADERS) # 这里先用自带解析器,lxml问题修复后可替换为lxml提升解析速度 soup = BeautifulSoup(page_resp.text, "html.parser") # 遍历所有带href属性的a标签 for a_tag in soup.find_all("a", href=True): raw_case_link = a_tag["href"] # 相对链接转绝对链接 if not raw_case_link.startswith("http"): raw_case_link = BASE_SITE_URL + raw_case_link # 筛选含apofasi的链接且去重 if "apofasi" in raw_case_link.lower() and raw_case_link not in total_case_links: total_case_links.append(raw_case_link)
解决FeatureNotFound找不到lxml树构建器错误
这个错误本质是解析器依赖缺失或调用参数错误,按顺序排查即可:
- 先安装lxml依赖,在命令行执行对应命令:
- pip环境:
pip install lxml - conda环境:
conda install lxml
- pip环境:
- 检查BeautifulSoup初始化参数,确认解析器名称拼写正确,正确写法为:
soup = BeautifulSoup(html_content, "lxml") - 如果以上步骤都无效,可以直接用Python自带的
html.parser作为解析器,不需要额外安装依赖,完全满足普通爬虫的解析需求,就是上文中代码使用的写法。
内容的提问来源于stack exchange,提问作者Θοδωρής Πάλλης
相关产品推荐
相关产品推荐

