Python爬虫小练习
爬虫是为了减少重复性的工作,本教程是以学习为目的,如有侵权请告知,立删。
实例----爬取南京地区的AQI数据
首先观察网站,通过右键检查查看元素代码。可以看到整个表格都是在tbody里面。每个tr对应表格中的一行数据,每个td对应各行的每一列数据。 通过上述的检查,可以大致了解了网站的数据结构,下面就可以开始爬取数据。具体看代码。
'''
@File : crawler_demo.py
@Time : 2022/01/07 21:19:24
@Author : HMX
@Version : 1.0
@Contact : kzdhb8023@163.com
'''
?
import requests
from bs4 import BeautifulSoup
import time
?
t1 = time.time()
text = requests.get('http://www.tianqihoubao.com/aqi/nanjing-202001.html').text
main_page = BeautifulSoup(text,'html.parser')
table = main_page.find('table')
f = open(r'C:\Users\KZDHB\Desktop\crawler\demo.txt','a')
trs = table.find_all('tr')
for tr in trs:
list1 = tr.find_all('td')
for td in list1:
f.write(td.text.strip())
f.write(',')
f.write('\n')
t2 = time.time()
print('共计用时{:.2f}s'.format(t2-t1))
结果如下:
如上,可以看到成功获取了南京地区202001的数据。接下来便是循环遍历月份和年份了。 通过观察我们可以发现网页最后的数字便是代表着数据的日期。如此我们循环一下网址便可获取所需数据。下面我们爬取2017年到2021年南京所有月份的数据。
'''
@File : crawler_all.py
@Time : 2022/01/07 21:24:33
@Author : HMX
@Version : 1.0
@Contact : kzdhb8023@163.com
'''
import requests
from bs4 import BeautifulSoup
import time
t1 = time.time()
for year in range(2017,2022):
for i in range(1,13):
if len(str(i))<2:
i = '0'+str(i)
print(str(i))
text = requests.get('http://www.tianqihoubao.com/aqi/nanjing-{}{}.html'.format(str(year),str(i))).text
main_page = BeautifulSoup(text,'html.parser')
table = main_page.find('table')
f = open(r'C:\Users\KZDHB\Desktop\crawler\{}{}.txt'.format(str(year),str(i)),'a')
trs = table.find_all('tr')
for tr in trs:
list1 = tr.find_all('td')
for td in list1:
f.write(td.text.strip())
f.write(',')
f.write('\n')
t2 = time.time()
print('共计用时{:.2f}s'.format(t2-t1))
结果如下:
以上就是本期的分享,欢迎关注微信公众号【森气笔记】。
|