对beautifulsoup的简单使用,beautifulsoup是爬虫中初学者使用的一个第三方库,操作简单,代码友好。 将代码包含到函数中,通过调用函数,实现重复爬取
import requests
from bs4 import BeautifulSoup
# pandas库,用于保存数据,同时这也是基础库
import pandas as pd
# 获取数据
# 获取网页源代码
def get_data(url):
resp=requests.get(url)
#utf-8不支持
html=resp.content.decode('gbk')
# 对原始的html文件进行解析
# html.parser是自带的解析器,可能会简析速度较慢
soup=BeautifulSoup(html,'html.parser')
# 通过find_all函数寻找所有的tr标签
tr_list=soup.find_all('tr')
# 命名三个列表用于接收数据
dates,conditions,temp=[],[],[]
for data in tr_list[1:]:
sub_data=data.text.split()
dates.append(sub_data[0])
conditions.append(''.join(sub_data[1:3]))
temp.append(''.join(sub_data[3:6]))
# 建立空数据框用于存放数据
_data=pd.DataFrame()
_data['日期']=dates
_data['天气']=conditions
_data['温度']=temp
# 返回数据
return _data
data1=get_data('http://www.tianqihoubao.com/lishi/beijing/month/201101.html')
data2=get_data('http://www.tianqihoubao.com/lishi/beijing/month/201102.html')
data3=get_data('http://www.tianqihoubao.com/lishi/beijing/month/201103.html')
# 将三个数据框通过concat连接,并重新设置索引
df=pd.concat([data1,data2,data3]).reset_index(drop=True)
# 数据预处理
# 将温度通过/进行分列
df['最高温度']=df['温度'].str.split('/',expand=True)[0]
df['最低温度']=df['温度'].str.split('/',expand=True)[1]
# 通过map函数对温度中的℃进行替换并转换为数字,方便后面的分析
df['最高温度']=df['最高温度'].map(lambda x:int(x.replace('℃','')))
df['最低温度']=df['最低温度'].map(lambda x:int(x.replace('℃','')))
# 保存
df.to_csv('./python/爬取天气数据/beijing.csv',index=False,encoding='utf-8')
# 用到时的读取
pd.read_csv('./python/爬取天气数据/beijing.csv')
关于爬虫的所有项目均为实践项目,没有理论,想法是基础理论很容易过期,啃教材感觉有点费力,好多项目都变更了,而且有些爬虫是基于python2的,因此这样的方式可能是最好的途径了。