这次爬取数据主要为了本人R语言期末作业第二部分,数据集不好获得,所以干脆自己爬取了一个简单数据集,使用方法为bs4,这个包我不太熟悉,主要是借鉴网上的主流思想方向,爬取了日期、天气状况、气温等数据并保存为csv表格。
- 导入包
本次使用到requests爬虫必需包,pandas用来数据处理包,time休眠包,random随机数包,bs4解析网页源码包以及反爬取的模拟浏览器fake_useragent 包。
import requests
import pandas as pd
import time, random
import csv
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
- 首先设置headers及UA
#http://www.tianqihoubao.com/lishi/xinxiang/month/202111.html 天气后报网站爬取当天的天气页面
headers = {'Referer': 'www.tianqihoubao.com',
'User-Agent': str(UserAgent().random)
}
for page in range(11, 22, 1):
url = f'http://www.tianqihoubao.com/lishi/xinxiang/month/20%s11.html' % page
resp = requests.get(url, headers=headers)
html = resp.content.decode('gbk')
soup = BeautifulSoup(html,'html.parser')
tr_list = soup.find_all('tr')
dates, contains, temp = [], [], []
for data in tr_list[1:]:
sub_data = data.text.split()
dates.append(sub_data[0])
contains.append(','.join(sub_data[1:3]))
temp.append(','.join(sub_data[3:6]))
_data = pd.DataFrame()
_data['日期'] = dates
_data['天气状况'] = contains
_data['气温'] = temp
print(_data)
data = pd.concat([_data]).reset_index(drop=True)
data.to_csv('D:/666666/PycharmWorkspace/Pythonspider/系统学习/天气文件/%sYear11Mouth.csv ' % page, encoding='utf-8')
print("第%s年的数据ok" % page)
time.sleep(2)
其中URL的变化要注意一下,最好刚开始不要用循环,那样的话报错误的话比较难找,本人开始就是先爬取一年的,然后再做出循环的。 比较文件保存情况如下: 所有源码都已经上传,如果看到请给刚开始发表文章的我一个支持吧,本人会将自己学习中做出的一些代码分享给大家,同时与大家互相进步。
|