用于从多个页面抓取表格的功能

问题描述

我正在学习 Python,我正在尝试创建一个函数来从几个不同的网页中抓取疫苗接种率表 - 我们的世界数据 https://github.com/owid/covid-19-data/tree/master/public/data/vaccinations/country_datahttps://ourworldindata.org/about 的 github 存储库。当网络抓取单个表并将其保存到数据框中时,该代码运行良好...

import requests  
from bs4 import BeautifulSoup 
import pandas as pd

url = "https://github.com/owid/covid-19-data/blob/master/public/data/vaccinations/country_data/Bangladesh.csv"
response = requests.get(url) 
response

scraping_html_table_BD = BeautifulSoup(response.content,"lxml") 
scraping_html_table_BD = scraping_html_table_BD.find_all("table","js-csv-data csv-data js-file-line-container")
df = pd.read_html(str(scraping_html_table_BD))
BD_df = df[0]

但是在尝试创建一个抓取多个页面函数时,我的运气并不好。我一直在关注本网站 3 上“使用一个脚本抓取多个页面”部分中的教程以及其他页面中的诸如 45 之类的 StackOverflow 问题。我曾尝试先创建一个全局变量,但最终出现了诸如“递归错误调用 Python 对象时超出了最大递归深度”之类的错误。这是我管理的最好的代码,因为它不会产生错误,但我没有设法将输出保存到全局变量。非常感谢您的帮助。

import pandas as pd  
from bs4 import BeautifulSoup
import requests

link_list = ['/Bangladesh.csv','/Nepal.csv','/Mongolia.csv']

def get_info(page_url):
    page = requests.get('https://github.com/owid/covid-19-data/tree/master/public/data/vaccinations/country_data' + page_url)
    scape = BeautifulSoup(page.text,'html.parser')    
    vaccination_rates = scape.find_all("table","js-csv-data csv-data js-file-line-container")
    result = {}

    df = pd.read_html(str(vaccination_rates))
    vaccination_rates = df[0]
    df = pd.DataFrame(vaccination_rates)
    print(df)
    df.to_csv("testdata.csv",index=False)

     
for link in link_list:
    get_info(link)

编辑:我可以查看保存到 csv 文件时迭代的最终网页,但不能查看上述链接中的数据。

new = pd.read_csv('testdata6.csv')
pd.set_option("display.max_rows",None,"display.max_columns",None)
new

解决方法

这是因为在每次迭代中,您的“testdata.csv”都会被一个新的覆盖。 所以你可以这样做: df.to_csv(page_url[1:],index=False)

,

我猜你每次都会覆盖你的“testdata.csv”,因此你可以看到最后一页。每次抓取页面时,我都会添加一个枚举函数来为单独的 csv 添加一个标识符,例如:

for key,link in enumerate(link_list):
get_info(link,key)
...
df.to_csv(f"testdata{key}.csv",index=False)

或者,打开此 csv 作为 get_info 函数的一部分,其步骤在 append new row to old csv file python 中可用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...