今天爬取的是一个航空公司网站的航班信息–飞常准
我们需要遍历抓取每一个航班里的所有信息



这里需要注意 有些列出来的航班可能不存在信息 需要进行一次判断
另外 访问过快会导致被该网站封号,解封会出现验证码,可以自己搭建免费ip代理池或使用收费代理
代码如下:

import requests
import json
import pytesseract
import re
import time
import randomfrom urllib.parse import urlencode
from lxml import etree
from PIL import Imageclass FeiChangZhun(object):def __init__(self):self.base_url = 'http://www.variflight.com' # 飞常准官网def get_list(self):r = requests.get('http://www.variflight.com/sitemap.html?AE71649A58c77=')  # 飞常准航班列表selector = etree.HTML(r.text)url_list = selector.xpath('//*[@class="list"]/a/@href')[1:]# 解析出每一个航班下面的Url链接new_list = []for i in url_list:new_list.append(self.base_url + i)# 测试第一个航班数据# mytest = new_list[9]return new_listdef parse_html(self):mytest = self.get_list()proxy = self.get_ip()for test in mytest:try:proxies = {"http": random.choice(proxy)}r = requests.get(test, proxies=proxies)selector = etree.HTML(r.text)b = selector.xpath('//*[@class="searchlist_innerli"]')if b:name = selector.xpath('//*[@class="tit"]/h1/@title')[0]log = "{0}航班存在信息:".format(name)print(log)# time.sleep(5)r = requests.Session()r.proxies = proxiesresp = r.get(test)selector = etree.HTML(resp.text)mylist = selector.xpath('//*[@id="list"]/li')# print(mylist)for selector in mylist:a = selector.xpath('div[@class="li_com"]/span[1]/b/a//text()')  # 航班信息a = a[0] + '' + a[1]b = selector.xpath('div[@class="li_com"]/span[2]/@dplan')  # 计划起飞c = selector.xpath('div[@class="li_com"]/span[3]/img/@src')  # 实际起飞if c:url = self.base_url + c[0]resp = r.get(url)filename = './pictures' + re.search(r's=(.*?)==', url).group(0) + '.png'with open(filename, 'wb') as f:f.write(resp.content)c = pytesseract.image_to_string(Image.open(filename))if len(c) < 5:  # 若识别不出‘:’或者‘.’ 进行拼接c = c[:2] + ':' + c[2:]else:# c = selector.xpath('div[@class="li_com"]/span[3]/text()')  # 实际起飞# c = re.sub(r"[\s+\.\!\/_,$%^*(+\"\')]+|[+——?【】?~@#¥%……&*]+|\\n+|\\r+|(\\xa0)+|(\\u3000)+|\\t", "", str(c[0]))c = '暂无信息'd = selector.xpath('div[@class="li_com"]/span[4]/text()')  # 出发地e = selector.xpath('div[@class="li_com"]/span[5]/@aplan')  # 计划到达f = selector.xpath('div[@class="li_com"]/span[6]/text()')  # 实际到达f = re.sub(r"[\s+\.\!\/_,$%^*(+\"\')]+|[+?【】?~@#¥%……&*]+|\\n+|\\r+|(\\xa0)+|(\\u3000)+|\\t", "",str(f[0]))if f:f = '暂无信息'else:f = selector.xpath('div[@class="li_com"]/span[6]/img/@src')  # 实际到达url = self.base_url + f[0]resp = r.get(url)filename = './pictures' + re.search(r's=(.*?)==', url).group(0) + '.png'with open(filename, 'wb') as f:f.write(resp.content)f = pytesseract.image_to_string(Image.open(filename))if len(f) < 5:f = f[:2] + ':' + f[2:]g = selector.xpath('div[@class="li_com"]/span[7]/text()')  # 到达地h = selector.xpath('div[@class="li_com"]/span[8]/img/@src')  # 准点率i = selector.xpath('div[@class="li_com"]/span[9]/text()')  # 状态j = selector.xpath('div[@class="li_com"]/span[10]/a[1]/text()')  # 订制h = self.base_url + h[0]  # 准点率filename = './pictures' + re.search(r's=(.*?)=', h).group(0) + '.png'q = r.get(h)with open(filename, 'wb') as t:t.write(q.content)q = pytesseract.image_to_string(Image.open(filename))if len(q) < 5:q = q[:2] + ':' + q[2:]mydict = {"title": a,  # 航班信息"start_time": b[0],  # 计划起飞"actual_start_time": c,  # 实际起飞"start_place": d[0],  # 出发地"arrive_time": e[0],  # 计划到达"actual_arrive_time": f,  # 实际到达"arrive_place": g[0],  # 到达地"on-time": q,  # 准点率"satus": i[0],  # 状态"order": j[0]  # 定制}print(mydict)else:name = selector.xpath('//*[@id="byNumInput"]/@value')[0]log = "{0}航班不存在信息".format(name)print(log)except:continue# ip代理池 根据自身情况选择免费或付费def get_ip(self):r = requests.get('http://piping.mogumiao.com/proxy/api/get_ip_bs?appKey=63a4113d5b2842869c9d2774b960cc3f&count=10&expiryDate=0&format=1&newLine=2')mylist = r.textmyjson = json.loads(mylist)mylist = myjson.get('msg')pro = []for i in mylist:ip = "{0}:{1}".format(i.get("ip"), i.get("port"))try:a = requests.get('https://www.baidu.com/', proxies={'https': ip}, timeout=1)if a.status_code == 200:pro.append(ip)except:continuereturn prodef main():Fei = FeiChangZhun()Fei.parse_html()if __name__ == '__main__':main()

效果图如下:

由于航班信息是实时性较强的,所以使用原生的requests来写爬虫会比使用框架更好更方便。

网络爬虫-爬取飞常准航班信息相关推荐

  1. 20201126时隔一年半更新 python爬虫小项目--飞常准航班信息爬取variflight(下)

    时隔一年多,再更新飞常准的信息抓取,看了下其实就是和去年的没有太多变更的地方.打开首页.发现页面变了 入口在哪里了?之前首页有城市和航班信息入口,一开始怀疑是浏览器内存不支持加载一些脚本,更换了其他内 ...

  2. python爬虫小项目--飞常准航班信息爬取variflight(上)

    很久不更新博客,分享下最近一个小项目 飞常准 .飞常准是飞友科技旗下一个航班信息数据网络品牌.主要为用户提供航空相关数据.目前核心业务为航班动态和便宜机票搜索引擎.飞友科技旗下总有飞友网.飞常准.Va ...

  3. 网络爬虫爬取淘宝页面商品信息

    网络爬虫爬取淘宝页面商品信息 最近在MOOC上看嵩老师的网络爬虫课程,按照老师的写法并不能进行爬取,遇到了一个问题,就是关于如何"绕开"淘宝登录界面,正确的爬取相关信息.通过百度找 ...

  4. 爬取飞常准抵达地为成都的航班信息

    文章目录 页面分析 进入网站 获取城市代码 获取航班信息 注意事项 遇到的困难 未解决的问题 完整代码 结果展示 页面分析 进入网站 飞常准网址: http://www.variflight.com ...

  5. 爬虫 — 爬取携程的航班信息

    功能介绍:输入起点.终点.时间就能得到携程上的航班信息 代码: from prettytable import PrettyTable import requests import jsondef x ...

  6. Python:网络爬虫爬取某表情包网站

    Python:网络爬虫爬取某表情包网站 参考: 爬虫基础知识点汇总(html文件基础和4个常用库 超级详细长文预警) [爬虫教程]吐血整理,最详细的爬虫入门教程~ HTML的简单介绍 HTML的全称为 ...

  7. python网络爬虫_Python网络爬虫——爬取视频网站源视频!

    原标题:Python网络爬虫--爬取视频网站源视频! 学习前提 1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 ...

  8. python如何爬虫网页数据-python网络爬虫爬取网页内容

    1.什么是网络爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自 ...

  9. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  10. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

最新文章

  1. python推荐系统-用python写个简单的推荐系统示例程序
  2. PHP源码之数组的内部实现
  3. java请求并行方案_让 Yar Java Client 支持执行并行请求,ExecutorService 的使用
  4. squid3.0缓存服务器编译安装
  5. mysql hang_mysql hang
  6. python pop函数 索引_[python] 字典和列表中的pop()函数
  7. 详解基于J2ME平台下SOAP协议的应用
  8. php 删除最后一个空数组,php删除空数组
  9. MySQL 用户表损坏 无法导出数据 无法使用mysql_update mysqd --update=FORCE无效 措施之一
  10. 计算机应用技术作业答案,计算机应用与技术网上作业题参考答案20121109
  11. php 清除opcache缓存的方法
  12. 安装alexa工具条报毒
  13. 【ML】机器学习(西瓜书)思维导图
  14. 【蓝屏解决】笔记本频繁蓝屏,错误代码IRQL_NOT_LESS_OR_EQUAL
  15. 元宇宙专题003 | 如何才能抢先一步,各个省市元宇宙布局抢先看
  16. 湖北大学计算机学院王时绘,5G来了,有湖大人的智慧!
  17. 自助提取公积金(北京)
  18. 绿色便携版谷歌浏览器制作流程
  19. 明日之后什么服务器物品最便宜,明日之后:玩家晒物价最低的服务器,看到uzi标价,观众直接酸了...
  20. Numpy 学习看这一篇就够了(整理+理解+精简)

热门文章

  1. 1.安装编译软件(keil)
  2. TP框架使用ajax的post请求方式下载文件
  3. 基于php的学校固定资产管理系统
  4. 浅谈前端JavaScript编程风格
  5. 2021-04-23 Perl语言入门 导学
  6. java基础教程:集合概述(27)
  7. 双系统格式化Ubuntu分区后Windows 开机出现grub rescue问题
  8. 有道Java_有道词典java版下载-有道词典java豪华版v1.0.7 安卓版 - 极光下载站
  9. windows使用命令或批处理文件打开远程桌面
  10. g2(t)用matlab,数字信号处理实验报告