利用的python库,最近最流行的requests,BeautifulSoup。

requests:用于下载html BeautifulSoup:用于解析

下面开始分析:要获取所有城市的aqi,就要进入每个城市的单独链接,而这些链接可以从主页中获取

打开主网页,查看源代码,可以看到,所有的城市链接都在id=‘citylist’里面

把所有链接爬下来存在一个列表里面,然后依次爬取每个城市的单个链接,附代码

import requests

from bs4 import BeautifulSoup

import bs4

def get_all_city():

url='http://www.air-level.com'

try:

# 伪装成浏览器,headers

kv={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}

r=requests.get(url,headers=kv)

r.raise_for_status()

r.encoding=r.apparent_encoding

except:

print('爬取城市链接失败')

demo=r.text

soup=bs4(demo,'thml.parser')

time=soup.find('h4').string

print(time)

for it in soup.find(id='citylist').children:

if isinstance(it,s4.element.Tag):

for its in it.find_all('a'):

clist.append(its.get('href')) #加入列表当中去18|

cnlist.append(its.string)

之后就是每个城市的单独链接的信息爬取,以北京为例,查看源代码可知:

附爬取每个城市代码:

def get_one_page(city): # 获得HTML 爬取城市信息

url = "http://www.air-level.com"+city

if city in cwlink:

aqilist.append("异常链接")

else:

try:

kv = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'} # 伪装成浏览器,headers

r = requests.get(url, headers=kv)

r.raise_for_status()

r.encoding = r.apparent_encoding

except:

print("爬取失败")

demo = r.text

soup = BeautifulSoup(demo, "html.parser")

s = soup.find("span")

aqilist.append(s.string)

但是在爬取的过程中会发现问题,有的一些城市网站用浏览器打不开,也就爬取不了,所以要做处理,

在上面可以看到,本人用cwlist存储了所有异常链接,跳过去,不爬取。

附完整代码:

import requests

from bs4 import BeautifulSoup

import bs4

aqilist = [] # 储存城市AQI

clist = [] # 储存城市链接

cnlist = [] # 储存城市名字

cwlink = ["/air/changdudiqu/", "/air/kezilesuzhou/", "/air/linzhidiqu/", "/air/rikazediqu/",

"/air/shannandiqu/", "/air/simao/", "/air/xiangfan/", "/air/yilihasake/"]

def get_one_page(city): # 获得HTML 爬取城市信息

url = "http://www.air-level.com"+city

if city in cwlink:

aqilist.append("异常链接")

else:

try:

kv = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'} # 伪装成浏览器,headers

r = requests.get(url, headers=kv)

except:

print("爬取失败")

demo = r.text

soup = BeautifulSoup(demo, "html.parser")

s = soup.find("span")

aqilist.append(s.string)

def get_all_city():

url='http://www.air-level.com'

try:

# 伪装成浏览器,headers

kv={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}

r=requests.get(url,headers=kv)

except:

print('爬取城市链接失败')

demo=r.text

soup=BeautifulSoup(demo,'html.parser')

time=soup.find('h4').string

print(time)

for it in soup.find(id='citylist').children:

if isinstance(it,bs4.element.Tag):

for its in it.find_all('a'):

clist.append(its.get('href')) #加入列表当中去

cnlist.append(its.string)

def main():

get_all_city()

print('共爬取了{}个城市'.format(len(clist)))

for it in range(len(clist)):

get_one_page(clist[it])

print('{}{}'.format(cnlist[it],aqilist[it]))

main()

输出结果:

D:\application\Anaconda3\python.exe F:/test/venv/learning/test.py

更新时间 2019-03-09 22:00

共爬取了378个城市

北京135 轻度污染

上海83 良

天津99 良

重庆105 轻度污染

广州27 优

南京109 轻度污染

杭州68 良

鞍山137 轻度污染

安庆113 轻度污染

安顺30 优

安阳179 中度污染

安康83 良

阿坝州34 优

阿克苏地区90 良

阿拉善盟64 良

阿勒泰地区40 优

阿里地区10 优

北京135 轻度污染

宝鸡99 良

包头141 轻度污染

保定105 轻度污染

白城66 良

蚌埠123 轻度污染

本溪96 良

白山94 良

白银62 良

亳州126 轻度污染

保山38 优

巴中57 良

北海19 优

毕节30 优

滨州106 轻度污染

百色40 优

博州58 良

巴彦淖尔80 良

重庆105 轻度污染

成都61 良

长春69 良

承德59 良

沧州117 轻度污染

赤峰57 良

常州151 中度污染

常德83 良

长沙101 轻度污染

常熟94 良

长治89 良

朝阳61 良

潮州21 优

郴州39 优

池州89 良

崇左16 优

滁州140 轻度污染

昌吉州92 良

楚雄州36 优

昌都45 优

大连35 优

大同52 良

东莞23 优

丹东106 轻度污染

德州122 轻度污染

东营68 良

大庆51 良

大理州39 优

大兴安岭地区28 优

达州143 轻度污染

德宏州56 良

德阳59 良

定西65 良

迪庆州34 优

鄂尔多斯48 优

鄂州106 轻度污染

恩施州75 良

福州24 优

抚顺156 中度污染

阜阳148 轻度污染

富阳75 良

佛山22 优

阜新46 优

抚州58 良

防城港11 优

广州27 优

广安110 轻度污染

广元56 良

桂林31 优

贵阳52 良

赣州28 优

贵港26 优

固原71 良

甘孜州25 优

甘南州24 优

果洛州23 优

杭州68 良

哈尔滨69 良

合肥94 良

呼和浩特161 中度污染

海口46 优

邯郸126 轻度污染

衡水120 轻度污染

海门19 优

海北州23 优

海东地区47 优

海南州37 优

海西州30 优

哈密地区64 良

汉中75 良

鹤壁125 轻度污染

河池33 优

鹤岗32 优

黑河35 优

湖州68 良

衡阳91 良

和田地区76 良

河源8 优

菏泽130 轻度污染

贺州32 优

红河州95 良

淮安79 良

淮北139 轻度污染

怀化66 良

淮南128 轻度污染

黄山53 良

黄冈150 轻度污染

黄南州46 优

黄石90 良

惠州15 优

葫芦岛123 轻度污染

呼伦贝尔29 优

吉林63 良

济南111 轻度污染

济宁95 良

锦州145 轻度污染

佳木斯32 优

吉安59 良

江门13 优

江阴105 轻度污染

胶南30 优

胶州53 良

焦作120 轻度污染

嘉兴93 良

嘉峪关61 良

揭阳37 优

即墨58 良

金昌72 良

晋城112 轻度污染

景德镇60 良

荆门119 轻度污染

荆州76 良

金华59 良

金坛124 轻度污染

晋中69 良

九江96 良

酒泉41 优

鸡西35 优

句容141 轻度污染

昆明54 良

昆山92 良

开封165 中度污染

库尔勒67 良

克州81 良

喀什地区63 良

克拉玛依55 良

克孜勒苏州异常链接

洛阳109 轻度污染

拉萨49 优

连云港43 优

廊坊81 良

来宾37 优

莱芜141 轻度污染

莱西49 优

莱州58 良

兰州59 良

乐山62 良

凉山州27 优

聊城126 轻度污染

辽阳147 轻度污染

辽源61 良

丽江15 优

临安73 良

临沧59 良

临汾149 轻度污染

临沂105 轻度污染

丽水56 良

六安99 良

六盘水38 优

柳州53 良

溧阳100 良

陇南48 优

龙岩20 优

娄底76 良

漯河165 中度污染

泸州77 良

吕梁83 良

临夏州34 优

林芝22 优

马鞍山119 轻度污染

茂名21 优

眉山46 优

梅州23 优

绵阳56 良

牡丹江58 良

南京109 轻度污染

南昌96 良

南宁31 优

南充95 良

南平13 优

南通64 良

南阳114 轻度污染

宁波92 良

宁德34 优

内江68 良

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐