Python 什么';这是从维基百科中提取特定文本的最佳方式;使用BeautifulSoup和列表的s信息框?

Python 什么';这是从维基百科中提取特定文本的最佳方式;使用BeautifulSoup和列表的s信息框?,python,web-scraping,beautifulsoup,wikipedia,infobox,Python,Web Scraping,Beautifulsoup,Wikipedia,Infobox,我使用BeautifulSoup从维基百科的信息框(收入)中提取特定文本。如果收入文本在“a”标记内,则我的代码有效。不幸的是,并非所有页面的收入都列在“a”标签内。例如,有些人在“span”标记后有收入文本。我想知道获取公司名单收入文本的最佳/最安全的方法是什么。找到另一个标签代替“a”最有效吗?还是别的什么?谢谢你的帮助 company = ['Lockheed_Martin', 'Phillips_66', 'ConocoPhillips', 'Sysco', 'Baker_Hughes'

我使用BeautifulSoup从维基百科的信息框(收入)中提取特定文本。如果收入文本在“a”标记内,则我的代码有效。不幸的是,并非所有页面的收入都列在“a”标签内。例如,有些人在“span”标记后有收入文本。我想知道获取公司名单收入文本的最佳/最安全的方法是什么。找到另一个标签代替“a”最有效吗?还是别的什么?谢谢你的帮助

company = ['Lockheed_Martin', 'Phillips_66', 'ConocoPhillips', 'Sysco', 'Baker_Hughes']

for c in company:
    r = urllib.urlopen('https://en.wikipedia.org/wiki/' + c).read()
    soup = BeautifulSoup(r, "lxml")

    rev = re.compile('^Revenue')
    thRev = [e for e in soup.find_all('th', {'scope': 'row'}) if rev.search(e.text)][0]
    tdRev = thRev.find_next('td')
    revenue = tdRev.find_all('a')

    for f in revenue:
        print c + " " + f.text
        break
您可以尝试:

from bs4 import BeautifulSoup
import urllib
import re
company = ['Lockheed_Martin', 'Phillips_66', 'ConocoPhillips', 'Sysco', 'Baker_Hughes']

for c in company:
    r = urllib.urlopen('https://en.wikipedia.org/wiki/' + c).read()
    soup = BeautifulSoup(r, "lxml")
    for tr in soup.findAll('tr'):
        trText = tr.text
        if re.search(r"^\bRevenue\b$", trText):
            match = re.search(r"\w+\$(?:\s+)?[\d\.]+.{1}\w+", trText)
            revenue = match.group()
            print c+"\n"+revenue+"\n"

输出:

Lockheed_Martin
US$ 46.132 billion
Phillips_66
US$ 161.21 billion
ConocoPhillips
US$55.52 billion
Sysco
US$44.41 Billion
Baker_Hughes
US$ 22.364 billion

注意: 您可能希望改用,即:

https://en.wikipedia.org/w/api.php?action=query&titles=Baker_Hughes&prop=revisions&rvprop=content&format=json

你能提供2个url示例吗?是的!很抱歉在你的两个例子中,收入不在
a
标签中。维基百科没有api吗?你应该用它来代替刮擦