首先爬取地址:http://www.air-level.com/

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

requests:用于下载html

BeautifulSoup:用于解析

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

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

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

def get_all_city():    # 爬取城市链接
url = "http://www.air-level.com"
try:
kv = {'user-agent': 'Mozilla/5.0'} # 伪装成浏览器,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")
time = soup.find('h4').string
print(time)
for it in soup.find(id="citylist").children:
if isinstance(it, bs4.element.Tag): # 检测it的类型,得是一个bs4.element.Tag类型
for its in it.find_all('a'):
clist.append(its.get('href')) # 加入列表当中去
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'} # 伪装成浏览器,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'} # 伪装成浏览器,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) def get_all_city(): # 爬取城市链接
url = "http://www.air-level.com"
try:
kv = {'user-agent': 'Mozilla/5.0'} # 伪装成浏览器,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")
time = soup.find('h4').string
print(time)
for it in soup.find(id="citylist").children:
if isinstance(it, bs4.element.Tag): # 检测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()

简单的静态爬取就实现了

python爬虫之静态网页——全国空气质量指数(AQI)爬取的更多相关文章

  1. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库

    前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/forum-191-1.html上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种 ...

  2. Python爬虫入门教程 12-100 半次元COS图爬取

    半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...

  3. Python爬虫入门教程 3-100 美空网数据爬取

    美空网数据----简介 从今天开始,我们尝试用2篇博客的内容量,搞定一个网站叫做"美空网"网址为:http://www.moko.cc/, 这个网站我分析了一下,我们要爬取的图片在 ...

  4. Python 爬虫入门(三)—— 寻找合适的爬取策略

    写爬虫之前,首先要明确爬取的数据.然后,思考从哪些地方可以获取这些数据.下面以一个实际案例来说明,怎么寻找一个好的爬虫策略.(代码仅供学习交流,切勿用作商业或其他有害行为) 1).方式一:直接爬取网站 ...

  5. Python爬虫入门教程: 半次元COS图爬取

    半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...

  6. 小白学 Python 爬虫(16):urllib 实战之爬取妹子图

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  7. Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Eastmount PS:如有需要Python学习资料的小伙伴可以加 ...

  8. Python爬虫入门教程 11-100 行行网电子书多线程爬取

    行行网电子书多线程爬取-写在前面 最近想找几本电子书看看,就翻啊翻,然后呢,找到了一个 叫做 周读的网站 ,网站特别好,简单清爽,书籍很多,而且打开都是百度网盘可以直接下载,更新速度也还可以,于是乎, ...

  9. Python爬虫入门教程 10-100 图虫网多线程爬取

    图虫网-写在前面 经历了一顿噼里啪啦的操作之后,终于我把博客写到了第10篇,后面,慢慢的会涉及到更多的爬虫模块,有人问scrapy 啥时候开始用,这个我预计要在30篇以后了吧,后面的套路依旧慢节奏的, ...

随机推荐

  1. hive独立配置mysql

    版本 安装好jdk,hadoop配置好环境变量 配置 HIVE_HOME 开始安装hive, 在 /home/hadoop/apache-hive-1.2.1-bin/conf 创建文件 hive-s ...

  2. [error] eclipse编写spring等xml配置文件时只有部分提示,tx无提示

    eclipse编写spring等xml配置文件时只有<bean>.<context>等有提示,其他标签都没有提示 这时就需要做以下两步操作(下面以事务管理标签为例) 1,添加命 ...

  3. 关于分布式环境下的id生成

    public class IdWorker { //基准时间 public const long Twepoch = 1288834974657L; //机器标识位数 ; //数据标志位数 ; //序 ...

  4. 依赖注入[8]: .NET Core DI框架[服务消费]

    包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IServiceProvider对象.当需要消费某个服务实例的时候,我们只需要指定服务类型调用IServicePr ...

  5. 消息队列RabbitMq、ActiveMq、ZeroMq、kafka之间的比较

    MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部 ...

  6. [Swift]LeetCode927. 三等分 | Three Equal Parts

    Given an array A of 0s and 1s, divide the array into 3 non-empty parts such that all of these parts ...

  7. [Swift]LeetCode1007. 行相等的最少多米诺旋转 | Minimum Domino Rotations For Equal Row

    In a row of dominoes, A[i] and B[i] represent the top and bottom halves of the i-th domino.  (A domi ...

  8. 知识扩展--if...else...与switch...case...的执行原理

    一.简述 编程语言中的条件分支结构有两种:if-else和switch-case,这两种条件分支之间可以相互转换,但是也存在一些区别,那么什么时候该用if-else,什么时候该用switch-case ...

  9. Python内置函数(29)——help

    英文文档: help([object]) Invoke the built-in help system. (This function is intended for interactive use ...

  10. RabbitMQ学习笔记(五) Topic

    更多的问题 Direct Exchange帮助我们解决了分类发布与订阅消息的问题,但是Direct Exchange的问题是,它所使用的routingKey是一个简单字符串,这决定了它只能按照一个条件 ...