用Python从Wikipedia的Infobox获取文本

2024-04-26 04:00:31 发布

您现在位置:Python中文网/ 问答频道 /正文

想要获取https://en.wikipedia.org/wiki/Air_Alg%C3%A9rie的信息框内容吗

我跟着this article。你知道吗

import requests 
from lxml import etree 

url='https://en.wikipedia.org/wiki/Air_Alg%C3%A9rie'

req = requests.get(url)  

store = etree.fromstring(req.text) 

# this will give Motto portion of above  
# URL's info box of Wikipedia's page 
output = store.xpath('//table[@class="infobox vcard"]/tr[th/text()="Destinations"]/td/i')  

# printing the text portion 
print output[0].text   

但它是空的 enter image description here

即使需求文本存在,返回null。 如何获取此信息框内容? 尤其是

国际航空运输协会国际民航组织 阿达

我需要国际航空运输协会,国际民航组织代码。 请帮忙。你知道吗

还要记住,DBPedia不是与Wikipedia实时同步的,在Wikipedia版本和DBPedia中相应条目之间可能会有几个月的延迟。我不想要百科全书的内容。你知道吗


Tags: texthttpsorgimport信息内容wikiair
1条回答
网友
1楼 · 发布于 2024-04-26 04:00:31

要获得AHDAHAIR ALGERIE,可以使用

xpath( '//td[@class="nickname"]' ) 

至于xpath:在这个HTML中,在<table><tr>之间有<tbody>,所以必须在xpath中使用它

'//table[@class="infobox vcard"]/tbody/tr[th/text()="Destinations"]/td'

或者使用//,即使在<table><tr>之间有更多的标记,它也能工作

'//table[@class="infobox vcard"]//tr[th/text()="Destinations"]/td'

我还跳过了末尾的<i>,因为行"Destinations"没有使用<i>


import requests 
from lxml import etree 

url='https://en.wikipedia.org/wiki/Air_Alg%C3%A9rie'

req = requests.get(url)  
store = etree.fromstring(req.text) 

output = store.xpath('//td[@class="nickname"]')  
for x in output:
    print(x.text.strip())

#output = store.xpath('//table[@class="infobox vcard"]//tr[th/text()="Destinations"]/td')
output = store.xpath('//table[@class="infobox vcard"]/tbody/tr[th/text()="Destinations"]/td')
print(output[0].text) 

结果

AH
DAH
AIR ALGERIE
69

编辑:

我使用另一个xpath获取名称"IATA""ICAO""Callsign",然后使用zip()将它们与"AH""DAH""AIR ALGERIE"分组

import requests 
from lxml import etree 

url='https://en.wikipedia.org/wiki/Air_Alg%C3%A9rie'

req = requests.get(url)  
store = etree.fromstring(req.text) 

keys = store.xpath('//table[@class="infobox vcard"]//table//tr[1]//a')
#for x in keys:
#    print(x.text.strip())

values = store.xpath('//td[@class="nickname"]')  
#for x in values:
#    print(x.text.strip())

some_dict = dict()

for k, v in zip(keys, values):
    k = k.text.strip()
    v = v.text.strip()
    some_dict[k] = v
    print(k, '=', v)

print(some_dict)

结果:

IATA = AH
ICAO = DAH
Callsign = AIR ALGERIE

{'IATA': 'AH', 'ICAO': 'DAH', 'Callsign': 'AIR ALGERIE'}

相关问题 更多 >