想要获取https://en.wikipedia.org/wiki/Air_Alg%C3%A9rie的infobox内容
我跟踪了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 但它是空的

即使req.text存在,也会返回null。我怎样才能得到这个infobox的内容?尤其是,
国际航空运输协会国际民航组织
阿达
我需要国际航空运输协会和国际民航组织的代码。请帮帮忙。
还要记住,DBPedia与维基百科不是实时同步的,在维基百科版本和DBPedia中的相应条目之间可能会有几个月的延迟。我不想要DBPedia内容。
发布于 2019-08-01 12:20:45
要获得AH、DAH、AIR 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'}https://stackoverflow.com/questions/57300860
复制相似问题