如何通过BeautifulSoup in Python提取子标签中的href?
How to extract href in sub-tags through BeautifulSoup in Python?
例如:
<ul class="polysemantList-wrapper cmn-clearfix" style="display: none">
<li class="item">▪<span class="selected">美国1995年马丁·坎贝尔执导好莱坞电影</span></li>
<li class="item">▪<a title="锦瑟华年创作都市异能小说" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/7822656#viewPageContent">锦瑟华年创作都市异能小说</a></li>
<li class="item">▪<a title="单兵便携式电脑" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/16402442#viewPageContent">单兵便携式电脑</a></li>
<li class="item">▪<a title="任天堂Wii主机射击类游戏《黄金眼》" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585407#viewPageContent">任天堂Wii主机射击类游戏《黄金眼》</a></li>
<li class="item">▪<a title="珠宝鉴定职业" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585395#viewPageContent">珠宝鉴定职业</a></li>
<li class="item">▪<a title="Rare Software制作的N64游戏" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/10704458#viewPageContent">Rare Software制作的N64游戏</a></li>
<li class="item">▪<a title="大鹏金翅明王小说" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/17571741#viewPageContent">大鹏金翅明王小说</a></li>
<li class="item">▪<a title="证券分析软件" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585420#viewPageContent">证券分析软件</a></li>
<li class="item">▪<a title="《藏地密码》中的藏獒" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585384#viewPageContent">《藏地密码》中的藏獒</a></li>
</ul>
首先,我可以提取多项:
multi_entry = soup.findAll('ul', attrs = {'class': 'polysemantList-wrapper cmn-clearfix'})
那如何定位到子标签li的href呢?我想获得每个项目中所有网址的列表。以下可以提取所有'li'项,但不一定来自polysemantList部分。
li_items = soup.findAll('li', attrs={'class': 'item'})
我们可以在polysemantList-wrapper cmn-clearfix
中找到polysemantList-wrapper cmn-clearfix
中class的所有li
。然后我们可以迭代结果并输出 href
值。
li = soup.find("ul", { "class" : "polysemantList-wrapper cmn-clearfix" }).findAll("li", attrs={'class': 'item'}, recursive=False)
for e in li:
for x in e.findAll('a', href=True):
print(x['href'])
也可以使用列表理解输出列表
[x['href'] for e in li for x in e.findAll('a', href=True)]
输出
/item/%E9%BB%84%E9%87%91%E7%9C%BC/7822656#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/16402442#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585407#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585395#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/10704458#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/17571741#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585420#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585384#viewPageContent
例如:
<ul class="polysemantList-wrapper cmn-clearfix" style="display: none">
<li class="item">▪<span class="selected">美国1995年马丁·坎贝尔执导好莱坞电影</span></li>
<li class="item">▪<a title="锦瑟华年创作都市异能小说" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/7822656#viewPageContent">锦瑟华年创作都市异能小说</a></li>
<li class="item">▪<a title="单兵便携式电脑" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/16402442#viewPageContent">单兵便携式电脑</a></li>
<li class="item">▪<a title="任天堂Wii主机射击类游戏《黄金眼》" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585407#viewPageContent">任天堂Wii主机射击类游戏《黄金眼》</a></li>
<li class="item">▪<a title="珠宝鉴定职业" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585395#viewPageContent">珠宝鉴定职业</a></li>
<li class="item">▪<a title="Rare Software制作的N64游戏" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/10704458#viewPageContent">Rare Software制作的N64游戏</a></li>
<li class="item">▪<a title="大鹏金翅明王小说" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/17571741#viewPageContent">大鹏金翅明王小说</a></li>
<li class="item">▪<a title="证券分析软件" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585420#viewPageContent">证券分析软件</a></li>
<li class="item">▪<a title="《藏地密码》中的藏獒" href="/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585384#viewPageContent">《藏地密码》中的藏獒</a></li>
</ul>
首先,我可以提取多项:
multi_entry = soup.findAll('ul', attrs = {'class': 'polysemantList-wrapper cmn-clearfix'})
那如何定位到子标签li的href呢?我想获得每个项目中所有网址的列表。以下可以提取所有'li'项,但不一定来自polysemantList部分。
li_items = soup.findAll('li', attrs={'class': 'item'})
我们可以在polysemantList-wrapper cmn-clearfix
中找到polysemantList-wrapper cmn-clearfix
中class的所有li
。然后我们可以迭代结果并输出 href
值。
li = soup.find("ul", { "class" : "polysemantList-wrapper cmn-clearfix" }).findAll("li", attrs={'class': 'item'}, recursive=False)
for e in li:
for x in e.findAll('a', href=True):
print(x['href'])
也可以使用列表理解输出列表
[x['href'] for e in li for x in e.findAll('a', href=True)]
输出
/item/%E9%BB%84%E9%87%91%E7%9C%BC/7822656#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/16402442#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585407#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585395#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/10704458#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/17571741#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585420#viewPageContent
/item/%E9%BB%84%E9%87%91%E7%9C%BC/9585384#viewPageContent