使用BeautifulSoup从目标URL提取相似网站列表及对应重叠评分
问题描述
需从站点信息采集页提取amazon.com对应的相似站点匹配数据,目前已定位到class为site的元素区域,目标是抓取全部4个相似站点的域名标识、以及每个站点与amazon.com的流量重叠评分,最终生成站点名称-评分对照表。实际操作中尝试从结构为<a href="/siteinfo/ebay.com" class="truncation">ebay.com</a>的锚标签中提取数据,但当前只能获取到单个值,无法拿到全量目标信息。
现有代码的核心缺陷
当前已编写的测试代码如下,因选择逻辑匹配错误,无法获得预期结果:
from bs4 import BeautifulSoup soup = BeautifulSoup(data, "html.parser") print([item.get_text(strip=True) for item in soup.select("span.site")])
- 选择器匹配目标错配:代码中指定选择的
span.site与实际相似站点所在的DOM层级不匹配,无法命中带truncation类的锚标签条目,自然无法获取全量站点列表 - 缺乏关联绑定逻辑:仅单独抓取站点文本的遍历方式,没有将站点条目和对应的重叠评分节点做映射,无法生成一一对应的对照关系
修正后的实现流程
- 优先定位class为
site的目标父容器,过滤页面其他无关元素的干扰 - 遍历父容器下所有带
truncation类的锚标签,提取每个标签内的站点域名文本 - 顺着DOM层级找到同一条目下的重叠评分节点,将站点名称和评分值做一一绑定
- 整理结果输出为对照表格式
修正后的参考实现代码:
from bs4 import BeautifulSoup soup = BeautifulSoup(data, "html.parser") # 定位相似站点列表父容器 similar_module = soup.find(class_="site") site_score_list = [] # 遍历所有相似站点锚标签 for site_link in similar_module.select("a.truncation"): site_name = site_link.get_text(strip=True) # 匹配同条目下的重叠评分值 overlap_score = site_link.parent.parent.select_one(".score-value").get_text(strip=True) site_score_list.append((site_name, overlap_score))
最终可输出符合要求的对照表效果:
站点名称 与amazon.com的重叠评分 eBay.com 70.1 pinterest.com 54.7 wikipedia.org 51.3 facebook.com 50.4
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

