如何使用Beautiful Soup从维基百科爬取汽车品牌列表
维基百科汽车品牌列表爬取优化方案
核心筛选逻辑
原代码抓取全页面<li>标签会混入导航栏、页脚、参考资料等无关内容,目标品牌全部位于页面内class为div-col的多列布局容器下的<ul>/<li>结构中,优先定位该类容器再提取内部<li>即可完成精准筛选。
优化后可直接运行代码
# 导入依赖包 from urllib.request import urlopen from bs4 import BeautifulSoup # 请求目标页面 source = urlopen('https://en.wikipedia.org/wiki/List_of_car_brands').read() soup = BeautifulSoup(source, 'lxml') # 初始化存储品牌的列表 car_brands = [] # 可选:如果需要存储品牌名+对应维基链接可以用字典 # car_brands_dict = {} # 先定位所有品牌列表所在的div-col容器 for col_div in soup.find_all("div", class_="div-col"): # 提取容器内所有li标签 for li in col_div.find_all("li"): # 部分li为空,过滤掉无<a>标签的无效项 brand_tag = li.find("a") if not brand_tag: continue # 获取品牌名(取a标签的text属性,避免混入html标签) brand_name = brand_tag.get_text(strip=True) car_brands.append(brand_name) # 字典存储的话追加下面这行 # car_brands_dict[brand_name] = "https://en.wikipedia.org" + brand_tag.get("href") # 测试输出前20个品牌验证结果 print(car_brands[:20]) # 打印总抓取品牌数量 print(f"共抓取到{len(car_brands)}个汽车品牌")
补充说明
- 如果需要过滤已停产的品牌,可以判断li文本中是否包含
(defunct)标识,自行决定是否保留 - 部分地区的子品牌会有缩进层级,本方案会自动抓取所有层级的品牌,无需额外处理
- 若遇到反爬限制,可以给请求添加
User-Agent请求头,改用requests库发送请求即可
内容的提问来源于stack exchange,提问作者Nhyi
相关产品推荐
相关产品推荐

