爬虫基本使用

爬虫的基本使用

——以2019年全国大学生数学建模C题第二问为例

第二问是要自己去找某个城市的机场的情况,这里我做的是先用爬虫把成都双流机场的到达航班的数据爬下来,然后统计每个小时到达的航班数目,然后画出来bar图。

过程比较简单,主要是想记录一下爬虫爬下来之后应用BeautifulSoap的解析方法。
网站在这里:成都双流机场的航班信息

用的jupyter notebook写的。
一共有70页,观察网站的网址发现不同的页就是后面加了一个’&page=xxx’,循环搞定。

进入网站用F12打开开发者模式,在elements中找数据在哪里,发现了包含资源的最小的class,用这一句

letter_list = soup.find( attrs={'class':'arlineta departab'} ).find_all('tr')

获得其下的内容,是一个列表,把所有tr标签列出来。
然后再根据标签获得相应的信息

flight=tr.find_all('td')

在这里插入图片描述
代码在这里,可以直接运行:

#%%
# 第一部分,先准备好网址和headers
import  requests
from bs4 import  BeautifulSoup
website='http://www.cdairport.com/flightInfor.aspx?t=4&attribute=A&time=0'
headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
all_page=[]
for i in range(1,71):
    if i==1:
        all_page.append(website)
    else:
        all_page.append(website+'&page='+str(i))
#%%
# 爬取数据
flights=[]
for website in all_page:
    r =requests.get(website,headers=headers)
    soup = BeautifulSoup(r.text, 'lxml')

    letter_list = soup.find( attrs={'class':'arlineta departab'} ).find_all('tr') #找到对应class下的所有tr标签

    for i, tr in enumerate(letter_list):
        if i!=0:
            flight=tr.find_all('td') #tr标签下继续找td标签
            dest=flight[1].get_text()# 看一下结构,到底要哪个,如果是要括号里的要用fligh.get['width']
            time=flight[4].get_text()
            flights.append((dest,time))

#%%
# 画图
import numpy as np
#  这里是去重,把同一个飞机但是不同航班的去掉
timetable = list(set(flights))
timetable.sort(key=flights.index) # 这个key是一个方法(函数),传入的参数是列表中的每个值,用来获取这个值对应的排位

sta=np.zeros((24))
for fl in timetable:
    time=int(fl[1][0:2])
    sta[time]+=1

import matplotlib.pyplot as plt
fig ,ax= plt.subplots(figsize=(14,7))
p1=ax.bar(x=np.arange(0,24),height=sta) # 这个是有一个返回值的,适用于在同一个ax上画了很多图的时候
xticklabels=[] # 设置x轴的标度
for i in range(24):
    if i<10:
        xticklabels.append('0'+str(i))
    else:
        xticklabels.append(str(i))
ax.set_xticks(np.arange(0,24))
ax.set_xticklabels(xticklabels)
ax.bar_label(p1,label_type='edge')#把数据显示出来
plt.show()

文章参考了这位博主的文章,写的很清楚。
但是爬的不是一个网站。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值