如何从维基百科主页抓取和显示项目链接



我正试图在;维基百科的姊妹项目";维基百科主页的部分。然而,除了项目链接之外,我最终得到了"维基媒体基金会;以及";项目";,这是我不想要的两个环节。有人能解释一下我是如何做到只显示我想要的项目链接的吗?

import requests
from bs4 import BeautifulSoup

url = 'https://en.wikipedia.org/'
soup = BeautifulSoup(requests.get(url).content, 'lxml')
for a in soup.select('h2:contains("Wikipedia's sister projects") + div a'):
print(a.text)

试试这个:

import requests
from bs4 import BeautifulSoup
url = 'https://en.wikipedia.org/'
soup = BeautifulSoup(requests.get(url).content, 'lxml')
sub_soup = soup.find('div',id = 'sister-projects-list')
print([ele.text for ele in sub_soup.find_all('a','external text')])

输出:

['Commons',
'MediaWiki',
'Meta-Wiki',
'Wikibooks',
'Wikidata',
'Wikinews',
'Wikiquote',
'Wikisource',
'Wikispecies',
'Wikiversity',
'Wikivoyage',
'Wiktionary']

你发布的代码也在打印空字符串:

l = []
for a in soup.select('h2:contains("Wikipedia's sister projects") + div a'):
l.append(a.text)
print(l)

输出:

['Wikimedia Foundation',
'projects',
'',
'Commons',
'',
'MediaWiki',
'',
'Meta-Wiki',
'',
'Wikibooks',
'',
'Wikidata',
'',
'Wikinews',
'',
'Wikiquote',
'',
'Wikisource',
'',
'Wikispecies',
'',
'Wikiversity',
'',
'Wikivoyage',
'',
'Wiktionary']

希望我能正确理解你的问题:你应该在html中选择更窄的除法:

for a in soup.findAll('div', {"id":"sister-projects-list"}):   
for b in a.findAll('a'):                                         
print(b.text)
print(b.get('href'))

此代码将为您提供该分区中的文本和链接。

最新更新