代码之家  ›  专栏  ›  技术社区  ›  zero

bs4方法访问维基百科页面:获取信息框

  •  0
  • zero  · 技术社区  · 1 年前

    我目前正试图将bs4方法应用于维基百科页面:结果不存储在df中

    由于在维基百科上抓取是一种非常常见的技术,我们可以使用适当的方法来处理许多不同的工作,因此我在获取结果并将其存储到df中时确实遇到了一些问题

    好吧,举一个非常常见的Wikipedia-bs4工作的例子,我们可以这样做:

    在这个页面上,我们有600多个结果-在子页面中:url=“https://de.wikipedia.org/wikiListe_der_St%C3%A4dte_in_Deutschland#Liste_der_St%C3%A4dte_in_Deutschland"

    因此,我按照如下方式执行第一个实验脚本:首先,我从维基百科页面中抓取表,然后将其转换为Pandas DataFrame。因此,我首先安装必要的软件包:确保您安装了requests、beautifulsoup4和pandas。如果您还没有安装,可以使用pip安装它们:

    pip安装请求beautifulsoup4pandas

    然后我这样做:首先,我从维基百科页面抓取表,然后将其转换为Pandas DataFrame。

    import pandas as pd
    
    # URL of the Wikipedia page
    url = "https://de.wikipedia.org/wiki/Liste_der_St%C3%A4dte_in_Deutschland#Liste_der_St%C3%A4dte_in_Deutschland"
    table = pd.read_html(url, extract_links='all')[1]
    base_url = 'https://de.wikipedia.org'
    table = table.apply(lambda col: [v[0] if v[1] is None else f'{base_url}{v[1]}' for v in  col])
    
    
    links = list(table.iloc[:,0])
    
    for link in links:
        print('\n',link)
        try:
            df = pd.read_html(link)[0]
            print(df)
        except Exception as e:
            print(e)
    

    看看我得到了什么——只有两张唱片。而不是几百。 顺便说一句;我想最好的办法是收集所有数据。 和/或储存它

    Document is empty
    
     https://de.wikipedia.org/wiki/Aach_(Hegau)
                                           Wappen  \
    0                                         NaN   
    1                                         NaN   
    2                                  Basisdaten   
    3                                Koordinaten:   
    4                                 Bundesland:   
    5                           Regierungsbezirk:   
    6                                  Landkreis:   
    7                                       Höhe:   
    8                                     Fläche:   
    9                                  Einwohner:   
    10                        Bevölkerungsdichte:   
    11                              Postleitzahl:   
    12                                   Vorwahl:   
    13                           Kfz-Kennzeichen:   
    14                         Gemeindeschlüssel:   
    15                                    LOCODE:   
    16              Adresse der  Stadtverwaltung:   
    17                                   Website:   
    18                             Bürgermeister:   
    19  Lage der Stadt Aach im Landkreis Konstanz   
    20                                      Karte   
    
                                         Deutschlandkarte  
    0                                                 NaN  
    1                                                 NaN  
    2                                          Basisdaten  
    3   47° 51′ N, 8° 51′ OKoordinaten: 47° 51′ N, 8° ...  
    4                                   Baden-Württemberg  
    5                                            Freiburg  
    6                                            Konstanz  
    7                                        545 m ü. NHN  
    8                                           10,68 km2  
    9                             2384 (31. Dez. 2022)[1]  
    10                               223 Einwohner je km2  
    11                                              78267  
    12                                              07774  
    13                                            KN, STO  
    14                                        08 3 35 001  
    15                                             DE AAC  
    16                         Hauptstraße 16  78267 Aach  
    17                                        www.aach.de  
    18                                     Manfred Ossola  
    19          Lage der Stadt Aach im Landkreis Konstanz  
    20                                              Karte 
    

    注意:我们在那里有几百条记录: enter image description here

    查看信息框:我想获取信息框的数据

    enter image description here

    更新:目标是什么: -如何获得存储在df中的完整结果。-并在info.box中包含所有数据。。(见上图)-联系信息等

    更新2:

    概述-页面: https://de.wikipedia.org/wiki/Liste_der_St%C3%A4dte_in_Deutschland#Liste_der_St%C3%A4dte_in_Deutschland

    它将我们带到大约1000个子页面:如下所示

    Aach(赫高): https://de.wikipedia.org/wiki/Aach_(Hegau) 亚琛: https://de.wikipedia.org/wiki/Aachen 阿伦: https://de.wikipedia.org/wiki/Aalen

    查看所谓的“信息框”的结果: https://de.wikipedia.org/wiki/Babenhausen_(Hessen) 巴本豪森(黑森州)

    +----------------------+--------------------------------------------------------------+
    |                      |                                                              |
    +----------------------+--------------------------------------------------------------+
    | koordinaten:         | ♁49° 58′ N, 8° 57′ OKoordinaten: 49° 58′ N, 8° 57′ O | | OSM |
    | Bundesland:          | Hessen                                                       |
    | Regierungsbezirk:    | Darmstadt                                                    |
    | Landkreis:           | Darmstadt-Dieburg                                            |
    | Höhe:                | 124 m ü. NHN                                                 |
    | Fläche:              | 66,85 km2                                                    |
    | Einwohner:           | 17.579 (31. Dez. 2023)[1]                                    |
    | Bevölkerungsdichte:  | 263 Einwohner je km2                                         |
    | Postleitzahl:        | 64832                                                        |
    | Vorwahl:             | 06073                                                        |
    | Kfz-Kennzeichen:     | DA, DI                                                       |
    | Gemeindeschlüssel:   | 06 4 32 002                                                  |
    | Stadtgliederung:     | 6 Stadtteile                                                 |
    | Adresse der          |                                                              |
    | Stadtverwaltung:     | Rathaus                                                      |
    | Marktplatz 2         |                                                              |
    | 64832 Babenhausen    |                                                              |
    | Website:             | www.babenhausen.de                                           |
    | Bürgermeister:       | Dominik Stadler (parteilos)                                  |
    +----------------------+--------------------------------------------------------------+
    

    https://de.wikipedia.org/wiki/Bacharach https://de.wikipedia.org/wiki/Backnang

    1 回复  |  直到 1 年前
        1
  •  1
  •   Sergey K    1 年前

    每个城市 dd 标签,所以你可以直接使用 find_all() 函数获取名称和URL。然后逐一访问每个URL并获取表。在这个例子中,只有5次重复,删除 5. 完整循环

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    
    
    def get_info(city_url: str) -> dict:
        info_data = {}
        response = requests.get(city_url)
        soup = BeautifulSoup(response.text, 'lxml')
        for x in soup.find('tbody').find_all(
                lambda tag: tag.name == 'tr' and tag.get('class') == ['hintergrundfarbe-basis']):
            if not x.get('style'):
                if 'Koordinaten' in x.get_text():
                    info_data['Koordinaten'] = x.findNext('span', class_='coordinates').get_text()
                else:
                    info_data[x.get_text(strip=True).split(':')[0]] = x.get_text(strip=True).split(':')[-1]
        return info_data
    
    
    cities = []
    response = requests.get('https://de.wikipedia.org/wiki/Liste_der_St%C3%A4dte_in_Deutschland#Liste_der_St%C3%A4dte_in_Deutschland')
    soup = BeautifulSoup(response.text, 'lxml')
    for city in soup.find_all('dd')[:5]:
        city_url = 'https://de.wikipedia.org' + city.findNext('a').get('href')
        result = {'City': city.get_text(), 'URL': 'https://de.wikipedia.org' + city.findNext('a').get('href')}
        result |= get_info(city_url)
        cities.append(result)
    df = pd.DataFrame(cities)
    print(df.to_string())
    

    输出:

                 City                                         URL           Koordinaten           Bundesland Regierungsbezirk            Landkreis         Höhe      Fläche                  Einwohner     Bevölkerungsdichte Postleitzahl Vorwahl       Kfz-Kennzeichen Gemeindeschlüssel   Adresse derStadtverwaltung   Bürgermeister      Postleitzahlen                  Vorwahlen             Stadtgliederung        Oberbürgermeisterin        Oberbürgermeister      Erste Bürgermeisterin Erster Bürgermeister
    0       Aach (BW)  https://de.wikipedia.org/wiki/Aach_(Hegau)   47° 51′ N, 8° 51′ O    Baden-Württemberg         Freiburg             Konstanz  545 m ü.NHN   10,68 km2     2384(31. Dez. 2022)[1]   223 Einwohner je km2        78267   07774                KN,STO       08 3 35 001     Hauptstraße 1678267 Aach  Manfred Ossola                 NaN                        NaN                         NaN                        NaN                      NaN                        NaN                  NaN
    1     Aachen (NW)        https://de.wikipedia.org/wiki/Aachen    50° 47′ N, 6° 5′ O  Nordrhein-Westfalen             Köln  Städteregion Aachen  175 m ü.NHN  160,85 km2  252.769(31. Dez. 2023)[1]  1571 Einwohner je km2          NaN     NaN               AC, MON       05 3 34 002            Markt52062 Aachen             NaN         52062–52080  0241, 02405, 02407, 02408               7Stadtbezirke  Sibylle Keupen(parteilos)                      NaN                        NaN                  NaN
    2      Aalen (BW)         https://de.wikipedia.org/wiki/Aalen   48° 50′ N, 10° 6′ O    Baden-Württemberg        Stuttgart          Ostalbkreis  430 m ü.NHN  146,58 km2   68.816(31. Dez. 2022)[1]   469 Einwohner je km2          NaN     NaN                AA, GD       08 1 36 088                          NaN             NaN  73430–73434, 73453        07361, 07366, 07367  Kernstadtund 8Stadtbezirke                        NaN  Frederick Brütting(SPD)                        NaN                  NaN
    3   Abenberg (BY)      https://de.wikipedia.org/wiki/Abenberg  49° 15′ N, 10° 58′ O               Bayern    Mittelfranken                 Roth  414 m ü.NHN   48,41 km2     5614(31. Dez. 2023)[1]   116 Einwohner je km2        91183   09178               RH, HIP       09 5 76 111  Stillaplatz 191183 Abenberg             NaN                 NaN                        NaN             14Gemeindeteile                        NaN                      NaN  Susanne König (parteilos)                  NaN
    4  Abensberg (BY)     https://de.wikipedia.org/wiki/Abensberg  48° 49′ N, 11° 51′ O               Bayern     Niederbayern              Kelheim  370 m ü.NHN   60,26 km2   14.685(31. Dez. 2023)[1]   244 Einwohner je km2        93326   09443  KEH,MAI,PAR, RID,ROL       09 2 73 111  Stadtplatz 193326 Abensberg             NaN                 NaN                        NaN             22Gemeindeteile                        NaN                      NaN                        NaN    Bernhard Resch[2]