首次使用BeautifulSoup,如何提取Wikipedia页面指定div下的ul/li元素?
解决BeautifulSoup定位Wikipedia特定div下ul/li的问题
别担心,刚上手BeautifulSoup遇到这种定位问题太正常了!我来一步步帮你精准锁定目标元素~
第一步:先获取并解析页面内容
首先得把Wikipedia页面的HTML拉下来,再用BeautifulSoup解析成可操作的对象。示例代码如下:
import requests from bs4 import BeautifulSoup # 替换成你要抓取的Wikipedia页面URL target_url = "https://en.wikipedia.org/wiki/Your_Target_Page" # 加个User-Agent避免被反爬(很多网站会拦截无标识的请求) 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' } response = requests.get(target_url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser')
第二步:定位到mw-parser-output的div
这是关键一步,我们要先把范围缩小到这个特定的div里,避免抓到页面其他区域的ul/li。因为class是Python的关键字,所以BeautifulSoup里用class_来指定类名:
# 找到目标div parser_div = soup.find('div', class_='mw-parser-output')
如果怕找不到(比如页面结构变了),可以加个判断:
if not parser_div: print("没找到mw-parser-output的div,检查页面结构或者URL是否正确!") exit()
第三步:提取div下的ul和li元素
现在就可以在这个div范围内查找你要的元素了,分两种常见场景:
场景1:获取所有ul,再遍历每个ul里的li
适合你需要按列表组来处理内容的情况:
# 获取div下所有的ul标签 all_ul_lists = parser_div.find_all('ul') # 遍历每个ul,提取里面的li文本 for ul in all_ul_lists: li_items = ul.find_all('li') for li in li_items: # strip=True可以去掉文本前后的空格和换行 print(li.get_text(strip=True))
场景2:直接获取div下所有层级的li
如果不管嵌套关系,只要这个div里的所有li,直接用find_all就行:
# 获取div下所有的li标签(包括嵌套在其他标签里的) all_li_items = parser_div.find_all('li') for li in all_li_items: print(li.get_text(strip=True))
小提示
如果遇到某些li里还有子标签(比如链接、粗体),你可以用li.contents或者遍历li的子元素来提取更精准的内容,比如只取纯文本部分。
内容的提问来源于stack exchange,提问作者grigs
相关产品推荐
相关产品推荐

