如何专门自动抓取 wikipedia-info 框并使用 python 打印更多(其他)wiki 页面的数据?

问题描述 投票:0回答:1

如何专门自动抓取维基百科信息框并使用 python 打印任何维基页面的数据?我的任务是自动打印维基百科信息框数据。也就是说,我发现信息框是一个典型的维基部分。因此,如果我熟悉这一部分 - 那么我就学到了很多 - 对于未来的任务 - 不仅对我来说,而且对许多其他正在深入研究抓取维基页面的拓扑的人来说。因此,这可能是一项一般任务 - 对许多其他人来说很有帮助并且包含大量信息。

这是我在本“课程”中的起点:作为示例,我做了一些测试(在 Trek wikipedia 页面 (https://en.wikipedia.org/wiki/Star_Trek)上),并在那里提取了信息框部分从右侧并使用 python 在屏幕上逐行打印它们,我特别想要信息框 - 该示例运行良好。

所以我继续 - 我做了以下事情:

import pandas
urlpage =  'https://de.wikipedia.org/wiki/Raiffeisenbank_Aidlingen'
data = pandas.read_html(urlpage)[0]
null = data.isnull()

for x in range(len(data)):
    first = data.iloc[x][0]
    second = data.iloc[x][1] if not null.iloc[x][1] else ""
    print(first,second,"\n")

效果非常好 - 现在我们有一组页面 - 类似于上面提到的:

如果我们选择这个:页面,列表上大约有 600 条记录(链接):https://de.wikipedia.org/wiki/Liste_der_Genossenschaftsbanken_in_Deutschland 我需要的是提取所有页面进行深度为1的遍历。

首页:https://de.wikipedia.org/wiki/Liste_der_Genossenschaftsbanken_in_Deutschland 子页面:https://de.wikipedia.org/wiki/Abtsgm%C3%BCnder_Bank 信息:

Staat    Deutschland
Sitz    Hauptstraße 13
73453 Abtsgmünd
Rechtsform  eingetragene Genossenschaft
Bankleitzahl    600 696 73[1]
BIC GENO DES1 ABR[1]
Gründung    24. August 1890
Verband Baden-Württembergischer Genossenschaftsverband e.V.
Website abtsgmuender-bank.de
Geschäftsdaten 2022[2]
Bilanzsumme 217,5 Mio. Euro
Einlagen    170,0 Mio. Euro
Kundenkredite   107,9 Mio. Euro
Mitarbeiter 24
Geschäftsstellen    3
Mitglieder  4.669
Leitung
Vorstand    Danny Dürrich
Karl Heinz Gropper
Aufsichtsrat    Holger Wengert (Vors.)

下一个子页面:https://de.wikipedia.org/wiki/Raiffeisenbank_Aidlingen 与信息:

Logo der Genossenschaftsbanken  Raiffeisenbank Aidlingen eG
Staat    Deutschland
Sitz    Hauptstraße 8
71134 Aidlingen
Rechtsform  eingetragene Genossenschaft
Bankleitzahl    600 692 06[1]
BIC GENO DES1 AID[1]
Gründung    12. Oktober 1901
Verband Baden-Württembergischer Genossenschaftsverband e.V.
Website ihrziel.de
Geschäftsdaten 2022[2]
Bilanzsumme 268,0 Mio. EUR
Einlagen    242,0 Mio. EUR
Kundenkredite   121,0 Mio. EUR
Mitarbeiter 26
Geschäftsstellen    1 + 1 SB-GS
Mitglieder  3.196
Leitung
Vorstand Marco Bigeschi
Markus Vogel
Aufsichtsrat Thomas Rott (Vorsitzender)

以及以下子页面:源自首页:(请注意,在此页面上,我们在 列表上有大约 600 条记录(链接):https://de.wikipedia.org/wiki/Liste_der_Genossenschaftsbanken_in_Deutschland

现在我们需要将以下解析器应用于所有子页面 - 然后将结果添加到数据框中并将其打印到屏幕

import pandas
urlpage =  'https://de.wikipedia.org/wiki/Raiffeisenbank_Aidlingen'
data = pandas.read_html(urlpage)[0]
null = data.isnull()

for x in range(len(data)):
    first = data.iloc[x][0]
    second = data.iloc[x][1] if not null.iloc[x][1] else ""
    print(first,second,"\n")

这里是我们想要处理的网址的列表

/wiki/Volksbank_im_Wesertal
/wiki/Raiffeisenbank_Westallg%C3%A4u
/wiki/Raiffeisenbank_MEHR_Mosel_-_Eifel_-_Hunsr%C3%BCck_-_Region
/wiki/Volksbank_Sangerhausen
/wiki/Volksbank_Grebenhain
/wiki/Obersulm
/wiki/Raiffeisenbank_Regenstauf
/wiki/Damme_(D%C3%BCmmer)
/wiki/Volksbank_Westerstede
/wiki/VR-Bank_Westm%C3%BCnsterland
/wiki/Breisach_am_Rhein
/wiki/DKM_Darlehnskasse_M%C3%BCnster
/wiki/Scharnhauser_Bank
/wiki/Sitz_(juristische_Person)
/wiki/Volksbank_Gera_Jena_Rudolstadt
/wiki/Volksbank_Bocholt
/wiki/G%C3%B6rlitz
/wiki/Raiffeisen-Volksbank_Neustadt

对于这组 URL,我执行以下操作:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# Function to parse data from Wikipedia page
def parse_wikipedia_page(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    
    # Find the relevant content
    infobox = soup.find("table", class_="toccolours toptextcells float-right infobox")
    if not infobox:
        return None
    
    # Extract data from the infobox
    data = {}
    rows = infobox.find_all("tr")
    for row in rows:
        cells = row.find_all(["th", "td"])
        if len(cells) == 2:
            key = cells[0].text.strip()
            value = cells[1].text.strip()
            data[key] = value
    
    return data

# List of URLs for Wikipedia pages
urls = [
    'https://de.wikipedia.org/wiki/Volksbank_im_Wesertal',
    'https://de.wikipedia.org/wiki/Raiffeisenbank_Westallg%C3%A4u',
    'https://de.wikipedia.org/wiki/Raiffeisenbank_MEHR_Mosel_-_Eifel_-_Hunsr%C3%BCck_-_Region',
    'https://de.wikipedia.org/wiki/Volksbank_Sangerhausen',
    'https://de.wikipedia.org/wiki/Volksbank_Grebenhain',
    'https://de.wikipedia.org/wiki/Obersulm',
    'https://de.wikipedia.org/wiki/Raiffeisenbank_Regenstauf',
    'https://de.wikipedia.org/wiki/Damme_(D%C3%BCmmer)',
    'https://de.wikipedia.org/wiki/Volksbank_Westerstede',
    'https://de.wikipedia.org/wiki/VR-Bank_Westm%C3%BCnsterland',
    'https://de.wikipedia.org/wiki/Breisach_am_Rhein',
    'https://de.wikipedia.org/wiki/DKM_Darlehnskasse_M%C3%BCnster',
    'https://de.wikipedia.org/wiki/Scharnhauser_Bank',
    'https://de.wikipedia.org/wiki/Sitz_(juristische_Person)',
    'https://de.wikipedia.org/wiki/Volksbank_Gera_Jena_Rudolstadt',
    'https://de.wikipedia.org/wiki/Volksbank_Bocholt',
    'https://de.wikipedia.org/wiki/G%C3%B6rlitz',
    'https://de.wikipedia.org/wiki/Raiffeisen-Volksbank_Neustadt'
]

# Initialize an empty list to store parsed data
all_data = []

# Parse each Wikipedia page and store the results
for url in urls:
    parsed_data = parse_wikipedia_page(url)
    if parsed_data:
        all_data.append(parsed_data)

# Create a DataFrame from the parsed data
df = pd.DataFrame(all_data)

# Print the DataFrame
print(df)

这会返回以下内容:

                   Staat                                           Sitz  \
0   Deutschland Deutschland               Osterstraße 1131863 Coppenbrügge   
1   Deutschland Deutschland           Alois-Stadler-Straße 288167 Gestratz   
2   Deutschland Deutschland           Koblenzer Straße 5256759 Kaisersesch   
3   Deutschland Deutschland               Göpenstraße 3506526 Sangerhausen   
4   Deutschland Deutschland                 Hauptstraße 3936355 Grebenhain   
5   Deutschland Deutschland                   Marktplatz 893128 Regenstauf   
6   Deutschland Deutschland                Peterstraße 1926655 Westerstede   
7   Deutschland Deutschland                    Kupferstr. 2848653 Coesfeld   
8   Deutschland Deutschland                          Breul 2648143 Münster   
9   Deutschland Deutschland           Raiffeisenstraße 2–473760 Ostfildern   
10  Deutschland Deutschland                      Johannisplatz 707743 Jena   
11  Deutschland Deutschland                 Meckenemstraße 1046395 Bocholt   
12  Deutschland Deutschland  Hagener Straße 4431535 Neustadt am Rübenberge   

                     Rechtsform   Bankleitzahl               BIC  \
0   eingetragene Genossenschaft  254 626 80[1]  GENO DEF1 COP[1]   
1   eingetragene Genossenschaft  733 698 23[1]  GENO DEF1 WWA[1]   
2   eingetragene Genossenschaft  570 691 44[1]  GENO DED1 KAI[1]   
3   eingetragene Genossenschaft  800 635 58[1]  GENO DEF1 SGH[1]   
4   eingetragene Genossenschaft  500 691 46[1]  GENO DE51 GRC[1]   
5   eingetragene Genossenschaft  750 618 51[1]  GENO DEF1 REF[1]   
6   eingetragene Genossenschaft  280 632 53[1]  GENO DEF1 WRE[1]   
7   eingetragene Genossenschaft  428 613 87[1]  GENO DEM1 BOB[1]   
8   eingetragene Genossenschaft  400 602 65[1]  GENO DEM1 DKM[1]   
9   eingetragene Genossenschaft  600 695 17[1]  GENO DES1 SCA[1]   
10  eingetragene Genossenschaft  830 944 54[1]  GENO DEF1 RUJ[1]   
11  eingetragene Genossenschaft  428 600 03[1]  GENO DEM1 BOH[1]   
12  eingetragene Genossenschaft  250 692 62[1]  GENO DEF1 NST[1]   

             Gründung                                            Verband  \
0   31. Dezember 1886                                   Genoverband e.V.   
1       1. April 1903                 Genossenschaftsverband Bayern e.V.   
2                1872                                   Genoverband e.V.   
3    2. Dezember 1931                                   Genoverband e.V.   
4                1880                                  Genoverband e. V.   
5     6. Februar 1894                 Genossenschaftsverband Bayern e.V.   
6     2. Februar 1899              Genossenschaftsverband Weser-Ems e.V.   
7                 NaN                                   Genoverband e.V.   
8     24. Januar 1961                                   Genoverband e.V.   
9    23. Oktober 1890  Baden-Württembergischer Genossenschaftsverband...   
10      16. März 1857                                   Genoverband e.V.   
11               1900                                   Genoverband e.V.   
12    12. Januar 1920                                   Genoverband e.V.   

                             Website       Bilanzsumme          Einlagen  \
0                           vb-iw.de    348,0 Mio. EUR    295,0 Mio. EUR   
1      raiffeisenbank-westallgaeu.de    404,6 Mio. EUR    344,5 Mio. EUR   
2                         rb-mehr.de    855,0 Mio. EUR    689,0 Mio. EUR   
3          volksbank-sangerhausen.de    176,6 Mio. EUR    155,7 Mio. EUR   
4                   vb-grebenhain.de      151,4 Mio. €      117,2 Mio. €   
5       raiffeisenbank-regenstauf.de   315,1 Mio. Euro   240,4 Mio. Euro   
6                  vb-westerstede.de    495,5 Mio. EUR    290,8 Mio. EUR   
7                  www.vrbank-wml.de     3,5 Mrd. Euro     2,1 Mrd. Euro   
8                             dkm.de    4.827 Mio. EUR    3.682 Mio. EUR   
9                scharnhauserbank.de    175,0 Mio. EUR    136,0 Mio. EUR   
10          www.volksbank-vor-ort.de  1.828,5 Mio. EUR  1.504,6 Mio. EUR   
11                     vb-bocholt.de  1.695,0 Mio. EUR  1.145,0 Mio. EUR   
12  raiffeisen-volksbank-neustadt.de    139,9 Mio. EUR    108,6 Mio. EUR   

       Kundenkredite Mitarbeiter             Geschäftsstellen   Mitglieder  \
0     180,0 Mio. EUR          58                  3 + 2 SB-GS        7.546   
1     254,4 Mio. EUR          59                8 und 3 SB-GS        6.367   
2     447,0 Mio. EUR         128                  9 + 3 SB-GS       13.728   
3      40,4 Mio. EUR          20                            4        4.634   
4        96,5 Mio. €          21                            4        2.796   
5    205,6 Mio. Euro          53                  5 + 1 SB-GS        3.107   
6     346,3 Mio. EUR          63                            2        3.579   
7      2,6 Mrd. Euro         361                           20  über 48.000   
8     1.759 Mio. EUR         137                            1        1.566   
9     124,0 Mio. EUR           9                            1        1.020   
10  1.108,3 Mio. EUR         247  15 Filialen + 20 SB-Stellen       34.653   
11  1.354,0 Mio. EUR         218                  7 + 7 SB-GS       22.676   
12     74,9 Mio. EUR          24                            2        1.763   

                                             Vorstand  \
0                Illka Osterwald (Vors.)Marco Weßling   
1   Martin Öfner (Vorstandssprecher)Hans-Peter Beyrer   
2   Heinrich Josef BlümlingKarl Josef BrunnerElmar...   
3                           Carmen ClausDaniel Kubica   
4                       Martin WinterKarsten Beckmann   
5            Stephan Hauf (Vorsitzender)Wolfgang Haas   
6                     Christian BlessenStefan Terveer   
7   Carsten Düerkop (Vors.)Matthias EntrupBerthold...   
8           Christoph Bickmann (Vors.)Gerrit Abelmann   
9   Joachim Rapp (Vorstandsvorsitzender)Andreas Gi...   
10  Falko Gaudig Torsten Narr Jens Luley Harald Ra...   
11                 Franz-Josef HeidermannMartin Wilms   
12                           Frank HahnMarkus Heumann   

                     Aufsichtsrat  
0             Andreas Voß (Vors.)  
1      Kathrin Koch (Vorsitzende)  
2            Günter Urwer (Vors.)  
3    Anette Stelter (Vorsitzende)  
4           Werner Müller (Vors.)  
5      Barbara Eigl (Vorsitzende)  
6             Ralf Denker (Vors.)  
7          Helmut Rüskamp (Vors.)  
8         Antonius Hamers (Vors.)  
9     Thomas Durst (Vorsitzender)  
10       Bernhard Schanze (Vors.)  
11      Christoph Ernsten (Vors.)  
12  Gilbert Herzig (Vorsitzender)  

我的问题如下:我的方法看起来有点花哨 - 特别是我没有找到一种聪明的方法来从第一页获取所有网址:https://de.wikipedia.org/wiki/Liste_der_Genossenschaftsbanken_in_Deutschland

另外 - 最终结果 - 它们看起来有点有趣。我很想把它带到一张桌子上,那会很棒。

python pandas web-scraping beautifulsoup request
1个回答
0
投票

你需要做的是首先找到所有的 url:s,然后将它们一一解析,然后将它们放入 dataframe 中。请注意,有 1379 个链接,因此即使使用我使用并发Futures 提供的解决方案,也需要一些时间来执行:

import requests
from bs4 import BeautifulSoup
import pandas as pd
from concurrent.futures import ThreadPoolExecutor

def get_wikipedia_urls(main_url):
    response = requests.get(main_url)
    soup = BeautifulSoup(response.content, "html.parser")
    
    links = soup.find_all("a", href=True)
    base_url = "https://de.wikipedia.org"
    
    urls = [base_url + link['href'] for link in links if link['href'].startswith("/wiki/") and ":" not in link['href']]
    
    return urls

def parse_wikipedia_page(url):
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.content, "html.parser")
        
        infobox = soup.find("table", class_="infobox")
        if not infobox:
            return None
        
        data = {}
        rows = infobox.find_all("tr")
        for row in rows:
            if row.find("th") and row.find("td"):
                key = row.find("th").text.strip()
                value = row.find("td").text.strip()
                data[key] = value
        
        data['URL'] = url  
        return data
    except Exception as e:
        print(f"Error parsing {url}: {e}")
        return None

main_url = 'https://de.wikipedia.org/wiki/Liste_der_Genossenschaftsbanken_in_Deutschland'

urls = get_wikipedia_urls(main_url)

all_data = []

with ThreadPoolExecutor(max_workers=10) as executor:
    results = list(executor.map(parse_wikipedia_page, urls))

all_data = [result for result in results if result]

df = pd.DataFrame(all_data)

print(df)

df.to_csv('wikipedia_infoboxes.csv', index=False)

这给出了

                       Rechtsform          Gründung  \
0            eingetragener Verein   1972 in Bonn[1]   
1                             NaN               NaN   
2                            e.V.    1. Januar 2009   
3                             NaN               NaN   
4            Eingetragener Verein   1893 in München   
...                           ...               ...   
1374  eingetragene Genossenschaft  28. Februar 1972   
1375                          NaN               NaN   
1376  eingetragene Genossenschaft  13. Oktober 1925   
1377                          NaN               NaN   
1378         eingetragener Verein   1972 in Bonn[1]   

                                     Sitz      Präsidentin  \
0                     Berlin, Deutschland  Marija Kolak[2]   
1                                     NaN              NaN   
2     Stuttgart (jur. Sitz ist Karlsruhe)              NaN   
3                                     NaN              NaN   
4                                 München              NaN   
...                                   ...              ...   
1374               Kamp 1733098 Paderborn              NaN   
1375                                  NaN              NaN   
1376             Goltenkamp 958452 Witten              NaN   
1377                                  NaN              NaN   
1378                  Berlin, Deutschland  Marija Kolak[2]   

                                               Vorstand  \
0               Daniel Quinten, Tanja Müller-Ziegler[3]   
1                                                   NaN   
2                                        Carsten Eisele   
3                                                   NaN   
4     Gregor Scheller (Vorstandsvorsitzender und Prä...   
...                                                 ...   
1374         Richard Böger (Vorsitzender)Jürgen Reineke   
1375                                                NaN   
1376          Volkmar Birx (Sprecher)Sylvia Oberwinster   
1377                                                NaN   
1378            Daniel Quinten, Tanja Müller-Ziegler[3]   

                                             Mitglieder  \
0                                            818 (2022)   
1                                                   NaN   
2     750 Genossenschaften und genossenschaftlich au...   
3                                                   NaN   
4                    1169[1] (Stand: 31. Dezember 2022)   
...                                                 ...   
1374                                              1.304   
1375                                                NaN   
1376                                              1.897   
1377                                                NaN   
1378                                         818 (2022)   

                              Website  \
0                          www.bvr.de   
1                                 NaN   
2     www.wir-leben-genossenschaft.de   
3                                 NaN   
4                    www.gv-bayern.de   
...                               ...   
1374                 bkc-paderborn.de   
1375                              NaN   
1376                      kbwitten.de   
1377                              NaN   
1378                       www.bvr.de   

                                                    URL  \
0     https://de.wikipedia.org/wiki/Bundesverband_de...   
1       https://de.wikipedia.org/wiki/Kreditwesengesetz   
2     https://de.wikipedia.org/wiki/Baden-W%C3%BCrtt...   
3               https://de.wikipedia.org/wiki/Karlsruhe   
4     https://de.wikipedia.org/wiki/Genossenschaftsv...   
...                                                 ...   
1374  https://de.wikipedia.org/wiki/Bank_f%C3%BCr_Ki...   
1375            https://de.wikipedia.org/wiki/Paderborn   
1376  https://de.wikipedia.org/wiki/Spar-_und_Kredit...   
1377               https://de.wikipedia.org/wiki/Witten   
1378  https://de.wikipedia.org/wiki/Bundesverband_de...   

            Organisationstyp            Präsident  ... ISO 9362  \
0                        NaN                  NaN  ...      NaN   
1                        NaN                  NaN  ...      NaN   
2     Genossenschaftsverband  Dr. Ulrich Theileis  ...      NaN   
3                        NaN                  NaN  ...      NaN   
4                        NaN                  NaN  ...      NaN   
...                      ...                  ...  ...      ...   
1374                     NaN                  NaN  ...      NaN   
1375                     NaN                  NaN  ...      NaN   
1376                     NaN                  NaN  ...      NaN   
1377                     NaN                  NaN  ...      NaN   
1378                     NaN                  NaN  ...      NaN   

       Bankleitzahl               BIC           Verband       Bilanzsumme  \
0               NaN               NaN               NaN               NaN   
1               NaN               NaN               NaN               NaN   
2               NaN               NaN               NaN               NaN   
3               NaN               NaN               NaN               NaN   
4               NaN               NaN               NaN               NaN   
...             ...               ...               ...               ...   
1374  472 603 07[1]  GENO DEM1 BKC[1]  Genoverband e.V.  5.180,0 Mio. EUR   
1375            NaN               NaN               NaN               NaN   
1376  452 604 75[1]  GENO DEM1 BFG[1]  Genoverband e.V.    171,8 Mio. EUR   
1377            NaN               NaN               NaN               NaN   
1378            NaN               NaN               NaN               NaN   

              Einlagen     Kundenkredite Geschäftsstellen  \
0                  NaN               NaN              NaN   
1                  NaN               NaN              NaN   
2                  NaN               NaN              NaN   
3                  NaN               NaN              NaN   
4                  NaN               NaN              NaN   
...                ...               ...              ...   
1374  3.946,0 Mio. EUR  2.082,0 Mio. EUR                1   
1375               NaN               NaN              NaN   
1376    137,4 Mio. EUR     69,0 Mio. EUR                1   
1377               NaN               NaN              NaN   
1378               NaN               NaN              NaN   

                        Aufsichtsrat Unternehmensleitung  
0                                NaN                 NaN  
1                                NaN                 NaN  
2                                NaN                 NaN  
3                                NaN                 NaN  
4                                NaN                 NaN  
...                              ...                 ...  
1374      Georg Rüter (Vorsitzender)                 NaN  
1375                             NaN                 NaN  
1376  Ralf Napiwotzki (Vorsitzender)                 NaN  
1377                             NaN                 NaN  
1378                             NaN                 NaN  

[1379 rows x 25 columns]
© www.soinside.com 2019 - 2024. All rights reserved.