用Python的beautifulsoup和requests和pandas抓取国家统计局广东调查总队 中每个月份的广东居民消费价格数据。网址:https://gdzd.stats.gov.cn/sjfb/sjjd/index_mo.html
时间: 2024-10-13 09:04:10 浏览: 44
在Python中,你可以使用`requests`库来发送HTTP请求获取网页内容,`BeautifulSoup`解析HTML结构,然后利用`pandas`处理和存储数据。以下是抓取广东省统计局广东居民消费价格数据的一个基本步骤:
1. 首先安装需要的库(如果尚未安装):
```
pip install requests beautifulsoup4 pandas
```
2. 然后编写一个Python脚本,利用`requests.get`函数获取网页内容,之后通过BeautifulSoup解析HTML:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = "https://gdzd.stats.gov.cn/sjfb/sjjd/index_mo.html"
response = requests.get(url)
# 检查请求状态码,通常200表示成功
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
else:
print("请求失败,状态码:", response.status_code)
exit()
# 定位数据所在的部分,这取决于网站的具体结构,可能需要调整
data_table = soup.find('table', {'class': 'table table-bordered'})
# 提取表格数据,这里假设表格的每个tr都是一个记录
data_rows = data_table.find_all('tr')
# 初始化一个空列表来保存数据
data_list = []
for row in data_rows[1:]: # 假设第一行是表头
cols = row.find_all('td') # 获取单元格元素
cols_data = [col.text.strip() for col in cols] # 提取文本并清理
data_list.append(cols_data)
# 创建一个DataFrame
df = pd.DataFrame(data_list, columns=data_list[0]) # 使用表头作为列名
```
3. 由于链接指向的是月份的页面列表,你可能需要循环遍历页面,逐月抓取数据。可以使用正则表达式或者HTML标签查找规律找到下一页的链接,然后递归地抓取。这里假设每页都有“下一页”链接:
```python
# ...(省略部分)
while True:
next_page_url = soup.find('a', string='下一页')['href']
if not next_page_url: # 如果找不到下一页,结束循环
break
response = requests.get(next_page_url)
soup = BeautifulSoup(response.text, 'html.parser')
# 抓取当前页数据
... # 重复上述提取数据的过程
```
4. 将所有数据合并到一个大的DataFrame中,并按月份排序:
```python
all_data = pd.concat(monthly_data) # 假设monthly_data是一个包含每月数据的列表
all_data['日期'] = all_data['日期'].apply(pd.to_datetime) # 根据实际格式转换日期
all_data.sort_values('日期', inplace=True) # 按日期排序
```
5. 最后,保存数据到CSV文件:
```python
all_data.to_csv('广东居民消费价格.csv', index=False)
```
注意,这个过程依赖于目标网站的具体HTML结构,如果结构发生变化,可能需要调整解析的部分。此外,如果你需要频繁抓取数据,可能需要遵守网站的robots.txt规则以及考虑使用更专业的API接口,而不是直接爬取。
阅读全文