下面是详细讲解“python获取页面表格数据存放到csv中的方法”的完整实例教程:
1. 确定目标页面和表格数据的位置
首先需要确定你要爬取数据的目标页面和表格数据的位置。可以通过查看目标页面的源代码找到表格数据所在的HTML标签,通常表格会使用<table>
标签。
2. 安装依赖库
使用Python爬虫获取页面表格数据需要用到以下依赖库:
- requests: 发送HTTP请求,获取页面数据。
- pandas: 将表格数据转化为DataFrame格式。
- BeautifulSoup: 解析HTML页面数据,获取表格数据。
- csv: 将表格数据存储为CSV文件格式。
可以使用以下命令安装这些依赖库:
pip install requests
pip install pandas
pip install beautifulsoup4
3. 使用requests获取页面数据
使用requests库发送HTTP请求,获取目标页面的HTML源码。例如,获取“https://www.example.com/table.html”页面的HTML源码的代码如下:
import requests
url = 'https://www.example.com/table.html'
response = requests.get(url)
html = response.content.decode('utf-8')
4. 使用BeautifulSoup解析HTML页面数据
使用BeautifulSoup库解析HTML页面数据,找到目标表格数据所在的HTML标签。例如,获取目标HTML页面内第一个表格数据的代码如下:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, features='html.parser')
table = soup.find_all('table')[0]
5. 使用pandas将表格数据转化为DataFrame格式
使用pandas库将表格数据转化为DataFrame格式,方便后续操作。例如,将目标表格数据转化为DataFrame格式的代码如下:
import pandas as pd
df = pd.read_html(str(table))[0]
6. 使用csv将表格数据存储为CSV文件格式
使用csv库将表格数据存储为CSV文件格式,方便后续数据分析。例如,将表格数据存储为“table.csv”文件的代码如下:
import csv
with open('table.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(df.columns)
for index, row in df.iterrows():
writer.writerow(row)
示例
下面介绍两个示例,演示如何使用Python获取页面表格数据存放到CSV中。
示例1
爬取国家统计局的全国城镇非私营单位就业人员数量统计数据(http://data.stats.gov.cn/easyquery.htm?cn=E0103)。
import requests
from bs4 import BeautifulSoup
import pandas as pd
import csv
url = 'http://data.stats.gov.cn/easyquery.htm?cn=E0103'
response = requests.get(url)
html = response.content.decode('utf-8')
soup = BeautifulSoup(html, features='html.parser')
table = soup.find_all('table')[0]
df = pd.read_html(str(table))[0]
with open('table.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(df.columns)
for index, row in df.iterrows():
writer.writerow(row)
示例2
爬取维基百科的2020年世界人口普查数据(https://en.wikipedia.org/wiki/2020_United_States_Census)。
import requests
from bs4 import BeautifulSoup
import pandas as pd
import csv
url = 'https://en.wikipedia.org/wiki/2020_United_States_Census'
response = requests.get(url)
html = response.content.decode('utf-8')
soup = BeautifulSoup(html, features='html.parser')
table = soup.find_all('table', {'class': 'wikitable sortable'})[0]
df = pd.read_html(str(table))[0]
with open('table.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(df.columns)
for index, row in df.iterrows():
writer.writerow(row)
这两个示例都是将目标页面的第一个表格数据获取,并将结果存放到“table.csv”文件中。你可以根据自己的需要修改代码获取更多的表格数据。