首页 > 编程问答 >尝试将 bs4 方法应用于维基百科页面:结果不存储在 df 中

尝试将 bs4 方法应用于维基百科页面:结果不存储在 df 中

时间:2024-07-25 15:48:06浏览次数:10  
标签:python pandas web-scraping beautifulsoup

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

中好吧 - 作为一个非常常见的 Wikipedia-bs4 作业的示例 - 我们可以采用这个:

在此页面上,我们有超过 600 个结果 - 在子页面中: url = "https://de.wikipedia.org/wiki/Liste_der_Genossenschaftsbanken_in_Deutschland"

所以要做第一个实验脚本,我如下所示:首先我从维基百科页面抓取表格,然后将其转换为 Pandas DataFrame .

因此我首先安装必要的软件包:确保您安装了 requests、beautifulsoup4 和 pandas。如果您还没有安装它们,您可以使用 pip 安装它们:

pip install requests beautifulsoup4 pandas

然后我会像这样操作:首先我从 Wikipedia 页面上抓取表格,然后将其转换为 Pandas DataFrame。

import requests
from bs4 import BeautifulSoup
import pandas as pd

# URL of the Wikipedia page
url = "https://de.wikipedia.org/wiki/Liste_der_Genossenschaftsbanken_in_Deutschland"

# Send a GET request to the URL
response = requests.get(url)

# Parse the HTML content of the page with BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')

# Find the first table in the page
table = soup.find('table', {'class': 'wikitable'})

# Initialize an empty list to store the data
data = []

# Iterate over the rows of the table
for row in table.find_all('tr'):
    # Get the columns in each row
    cols = row.find_all('td')
    # If there are columns in the row, get the text from each column and store it in the data list
    if cols:
        data.append([col.get_text(strip=True) for col in cols])

# Convert the data list to a Pandas DataFrame
df = pd.DataFrame(data, columns=["Bank Name", "Location", "Website"])

# Display the DataFrame
print(df)

# Optionally, save the DataFrame to a CSV file
df.to_csv('genossenschaftsbanken.csv', index=False)

看看我有什么返回:

3 s

# Display the DataFrame
print(df)

# Optionally, save the DataFrame to a CSV file
df.to_csv('genossenschaftsbanken.csv', index=False)

  Bank Name                                           Location  \
0      BWGV  Baden-Württembergischer Genossenschaftsverband...   
1       GVB                 Genossenschaftsverband Bayerne. V.   
2        GV                                   Genoverbande. V.   
3      GVWE              Genossenschaftsverband Weser-Emse. V.   
4       FGV                Freier Genossenschaftsverband e. V.   
5       PDG     PDG Genossenschaftlicher Prüfungsverband e. V.   
6                              Verband der Sparda-Banken e. V.   
7                                 Verband der PSD Banken e. V.   

             Website  
0          Karlsruhe  
1            München  
2  Frankfurt am Main  
3          Oldenburg  
4         Düsseldorf  
5             Erfurt  
6  Frankfurt am Main  
7               Bonn

好吧,我想我必须重新编写脚本的结尾...

更新:目的 - 是将数据从块中取出,请参阅示例:

https ://de.wikipedia.org/wiki/Abtsgm%C3%BCnder_Bank

enter image description here


的代码抓取了维基百科页面上的主要表格,其中仅列出了德国合作银行的协会,而不是想要的每个银行。

为了从提供的链接中提取所有合作银行的数据,需要修改的代码以访问每个合作银行的子页面并提取信息。

以下是如何做到这一点:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# URL of the main Wikipedia page
url = "https://de.wikipedia.org/wiki/Liste_der_Genossenschaftsbanken_in_Deutschland"

# Send a GET request to the URL
response = requests.get(url)

# Parse the HTML content of the page with BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')

# Find all links to the subpages of each bank
bank_links = []
for link in soup.find_all('a'):
    href = link.get('href')
    if href and "/wiki/" in href and not href.startswith("#"):
        bank_links.append("https://de.wikipedia.org" + href)

# Initialize an empty list to store the data
data = []

# Iterate over the bank links and extract data from each subpage
for link in bank_links:
    response = requests.get(link)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Extract bank name, location, and website
    bank_name = soup.find('h1', id='firstHeading').text.strip()

    infobox = soup.find('table', class_='infobox')
    location = ""
    website = ""

    if infobox:
        for row in infobox.find_all('tr'):
            cells = row.find_all('td')
            if len(cells) == 2:
                key = cells[0].text.strip()
                value = cells[1].text.strip()
                if key == "Sitz":
                    location = value
                elif key == "Website":
                    website = value

    data.append([bank_name, location, website])

# Convert the data list to a Pandas DataFrame
df = pd.DataFrame(data, columns=["Bank Name", "Location", "Website"])

# Display the DataFrame
print(df)

# Optionally, save the DataFrame to a CSV file
df.to_csv('genossenschaftsbanken.csv', index=False)

这段代码将:

  1. 从维基百科页面中提取所有指向子页面的链接。
  2. 遍历每个子页面并提取银行名称、位置和网站(如果可用)。
  3. 将提取的数据存储在一个列表中,然后将其转换为 Pandas DataFrame。

这应该可以帮助从维基百科页面中获取想要的数据。请注意,此代码依赖于页面的结构,如果维基百科页面的结构发生变化,则可能需要调整代码。

标签:python,pandas,web-scraping,beautifulsoup
From: 78788573

相关文章

  • 将 Pandas 数据帧转换为 Spark 数据帧错误
    我正在尝试将PandasDF转换为Sparkone。DFhead:10000001,1,0,1,12:35,OK,10002,1,0,9,f,NA,24,24,0,3,9,0,0,1,1,0,0,4,54310000001,2,0,1,12:36,OK,10002,1,0,9,f,NA,24,24,0,3,9,2,1,1,3,1,3,2,61110000002,1,0,4,12:19,PA,10003,1,1,7,f,NA,74,74,0,2,15,2,0,2,3,1,......
  • 在Python中字典是如何通过哈希表实现的以及哈希冲突是如何解决的
    哈希表(散列表)的工作原理哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。它通过哈希函数将输入的键(key)映射到表中的一个位置(即索引或槽位),从而以接近常数时间复杂度进行查找、插入和删除操作。哈希表的基本工作流程如下:哈希函数:哈希函数接受一个输入(键),并......
  • python cobs协议编解码算法demo
    1.SummaryCOBS(ConsistentOverheadByteStuffing)是一种算法,直译为一致的开销字节填充。简而言之,无论数据包的内容如何,都能通过产生高效可靠明确的数据包帧,从而使接受端能够从损坏的包中恢复。通常使用0x00来作为数据包的分隔符,即切割数据包的片分隔符。当使用0x00作为......
  • 如何将unicode编码为字节,以便可以检索到原始字符串?在Python 3.11中
    在python3.11中,我们可以对字符串进行编码,如:string.encode('ascii','backslashreplace')这对于说:hellö=>hell\\xf6但是当我插入时hellöw\\xf6rldIgethell\\xf6w\\xf6rld(注意第二个有一个看起来像字符转义序列的文字部分)......
  • python flask允许跨域
    flask接口支持跨域设置方法在Flask中,可以通过安装flask-cors扩展来支持跨域请求。下面是使用flask-cors扩展的示例代码:fromflaskimportFlaskfromflask_corsimportCORS#ipinstallflask-corsapp=Flask(__name__)CORS(app)可以通过CORS扩展的origins参数......
  • Pandas 读取带空格的文件名
    我有一个由空格分隔的3列文本文件,我喜欢将其放入数据框中。我使用以下构造来执行此操作:df=pd.read_csv(my_file,sep='',skiprows=4,names=('cola','colb','filename'))效果很好,直到我遇到其中包含空格的文件名。我在pd.read_csv中找不到选项来限制列数并处......
  • 在 Python 中动态定义文字字符串排列的并集
    我有一个字符串列表:strings=['a','b','c']我想声明列表中所有可能的有序对的Union类型。硬编码,这看起来像:Literal我如何动态定义CustomType=Literal['ab','ac','aa','ba','bb','bc�......
  • 关于 Python 中装饰器缓存的困惑
    我正在使用Python装饰器来实现函数的缓存。我了解缓存结果以提高性能的基本概念,但我正在努力解决如何处理不同的函数参数并确保底层数据更改时缓存更新。我已经实现了一个基本装饰器,它将函数结果存储在基于参数的字典。但是,此方法无法处理函数参数可能具有复杂结构(如嵌套列......
  • Python:__add__ 和 +,浮点数和整数的不同行为
    当将整数值添加到浮点值时,我意识到如果在浮点上调用该方法可以正常工作,例如:__add__但如果在整数上调用则不行:>>>n=2.0>>>m=1>>>n.__add__(m)3.0起初我认为|||只是对>>>m.__add__(n)NotImplemented和__add__类型的实现方式不同(例如f......
  • python中scrapy爬取数据get()与getall()区别
    在使用scrapy进行爬取数据的时候,有些时候需要爬取的是一段文本,或者一个div里面有很多内容,这时候我们就要使用到get()或者getall()来获取数据: get():是获取的满足条件的第一个数据。getall():是获取的满足条件的所有数据。scrapyget()getall()原理在Scrapy中,get(......