完成这个python爬取实验,并给出完整代码
时间: 2024-11-17 18:29:33 浏览: 7
要完成这个Python爬取实验并生成完整代码,我们需要实现以下步骤:
1. **分析浏览器和服务器之间的数据交互**:
- 使用Chrome开发者工具找到相关请求的URL和Form表单数据。
- 使用`requests`库模拟这些请求,获取数据。
2. **使用Selenium控制浏览器爬取网页**:
- 安装Selenium库和相应的WebDriver。
- 编写脚本使用Selenium打开目标网页,提取时间和价格数据。
3. **将数据保存到Excel文件**:
- 使用`pandas`库处理和保存数据到Excel文件。
4. **读取Excel文件并绘制价格曲线图**:
- 使用`matplotlib`库绘制价格曲线图。
以下是完整的代码实现:
### 安装必要的库
首先,确保安装了所需的库:
```bash
pip install requests pandas matplotlib selenium openpyxl
```
### 代码实现
#### 1. 使用`requests`库模拟请求
```python
import requests
import json
import pandas as pd
def fetch_data_with_requests():
url = "http://www.cqcoal.com/mars-web//indexmark/listPage"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
data = {
"page": 1,
"rows": 27,
"sidc": "INFO_DTE",
"sord": "desc"
}
response = requests.post(url, headers=headers, data=data)
if response.status_code == 200:
result = json.loads(response.text)
records = result['data']
df = pd.DataFrame(records)
return df[['time', 'price']]
else:
raise Exception(f"Request failed with status code {response.status_code}")
df_requests = fetch_data_with_requests()
df_requests.to_excel("coal_price_index_requests.xlsx", index=False)
print("Data saved to coal_price_index_requests.xlsx")
```
#### 2. 使用Selenium控制浏览器爬取网页
```python
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def fetch_data_with_selenium():
driver = webdriver.Chrome() # Ensure you have the ChromeDriver installed and in your PATH
driver.get("http://www.cqcoal.com/exp/weeklycheck.jsp")
time.sleep(5) # Wait for the page to load
# Assuming the data is in a table with class 'data-table'
table = driver.find_element(By.CLASS_NAME, 'data-table')
rows = table.find_elements(By.TAG_NAME, 'tr')
data = []
for row in rows[1:]: # Skip the header row
cols = row.find_elements(By.TAG_NAME, 'td')
date = cols[0].text
price = cols[1].text
data.append({'time': date, 'price': price})
driver.quit()
df = pd.DataFrame(data)
return df
df_selenium = fetch_data_with_selenium()
df_selenium.to_excel("coal_price_index_selenium.xlsx", index=False)
print("Data saved to coal_price_index_selenium.xlsx")
```
#### 3. 读取Excel文件并绘制价格曲线图
```python
import matplotlib.pyplot as plt
def plot_price_curve(df):
df['time'] = pd.to_datetime(df['time'])
df.sort_values('time', inplace=True)
plt.figure(figsize=(10, 5))
plt.plot(df['time'], df['price'].astype(float), marker='o')
plt.title('Coal Price Index Over Time')
plt.xlabel('Time')
plt.ylabel('Price (RMB/ton)')
plt.grid(True)
plt.show()
# Read the Excel files
df_requests = pd.read_excel("coal_price_index_requests.xlsx")
df_selenium = pd.read_excel("coal_price_index_selenium.xlsx")
# Plot the price curve
plot_price_curve(df_requests)
plot_price_curve(df_selenium)
```
### 总结
以上代码实现了以下功能:
1. 使用`requests`库模拟HTTP请求,从动态网站获取煤炭价格指数数据,并保存到Excel文件。
2. 使用Selenium控制浏览器爬取网页,提取时间和价格数据,并保存到Excel文件。
3. 读取Excel文件中的数据,绘制价格曲线图。
你可以根据需要调整代码中的参数和路径,以适应不同的环境和需求。
阅读全文