爬取和预处理网页div标签数据

爬取和预处理网页div标签数据

1.爬取数据
2.将爬取数据转换为DataFrame
3.预处理爬取后的数据

发了好几遍,都是版权问题审核不通过,以为是网址的问题,屏蔽了网址,还是不行,以为是数据的问题,删除数据还是不行,代码基本都是自己敲的,不知道到底是什么原因。

1. 爬取数据

设置爬取参数
爬取网页信息
解析爬取网页
提取有用信息
import pandas as pd
import requests 
from bs4 import BeautifulSoup as bs
# 设置请求header信息,有些网站是禁止爬虫程序爬取数据的,可以通过设置header信息来伪造浏览器浏览数据
headers = {'User-Agent': 'Mozilla/5.0',
        'Host':'设置网站主机'}   
# 查看和分析爬取数据的网址
url = 'https://lishi.*****.com/lanzhou/202201.html'  

# 爬取2022年12个月份的数据
data_all=[]
# 设置爬取年份
year=2022
# 通过分析爬取页面,可以观察到数据是按月份呈现在不同的页面,因此构造循环来爬取每个月的数据
for i in range(12):
    url = 'https://lishi.*****.com/lanzhou/{}{:0>2d}.html'.format(year,i+1)
    r = requests.request("GET", url, headers=headers)
    r.encoding = 'utf-8'
    # 观察爬取到的数据或者是爬取页面的源代码,分析爬取内容,用bs对爬取内容进行解析
    # 重点掌握BeautifulSoup的find方法和find_all方法
    soup = bs(r.text,'html.parser')
    qianqi=soup.find("div",{"class":"tian_three"})# 查找的div标签class为tian_three
    daylist=qianqi.find_all("li")

    for i in daylist:
        weather_div=i.find_all("div")
        temp=[]
        for j in weather_div:
            temp.append(j.text)
        data.append(temp)
## 2. 将爬取数据转换为DataFrame
```python
columns_name=['日期','最高温度','最低温度','天气状况','风向']
df=pd.DataFrame(data_all,columns=columns_name)
df
df.columns=['date_week','max_T','min_T','weather','wind']
df
# 保存爬取数据
df.to_excel('data/lanzhou_weather_2018.xlsx',encoding='utf_8')
df.dtypes
date_week    object
max_T        object
min_T        object
weather      object
wind         object
dtype: object

3. 预处理爬取数据

### 拆分日期星期信息
### 拆分风向信息
df
df['date_week'].apply(str)
temp = pd.DataFrame(df['date_week'].apply(lambda x:pd.Series(str(x).split(' '))))
temp
# 发现有多余空列

拆分表格列数据

temp=temp.loc[:,0:1]
temp.columns=['date','week']
# df=df.join(temp)
df
df['wind'].apply(str)
temp2=pd.DataFrame(df['wind'].apply(lambda x:pd.Series(str(x).split(' '))))

处理风向信息

temp2.columns = ['wind_direction','wind_level']
df=df.join(temp2)
df

处理日期信息

df = df.drop(columns="date_week")
df = df.drop(columns='wind')

设置爬取表格头信息

df=df[['date','week','max_T','min_T','weather','wind_direction','wind_level']]
df
# df.insert(loc=0,column="date",value=temp['date'])
# df.insert(loc=1,column="week",value=temp['week'])
# df.insert(loc=5,column="wind_direction",value=temp2['wind_direction'])
# df.insert(loc=6,column="wind_level",value=temp2['wind_level'])
# df
#保存预处理结果
df.to_excel('data/lanzhou_weather_2018pro.xlsx',encoding='utf_8')
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值