之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就可以开始第一次实战了。

这篇实战包含两个内容。

* 利用爬虫调用Api来解析照片的拍摄位置

* 利用爬虫爬取Bilibili视频中的弹幕

关于爬虫调用Api这一说法,其实就是通过get或者post请求携带着参数,将内容发给对方服务器,服务器会根据请求的Api是哪个来进行处理。

比如说/delete?id=2和/save?id=1&name=antz这两个请求就分别是删除id等于2的数据,保存一条id等于1姓名为antz的数据。

此时我们就只需要向对方服务器发送出这个请求就可以了,requests.get(url)就这么简单。

成长离不开与优秀的同伴共同交流,如果你需要好的学习环境,好的学习资源,这里欢迎每一位热爱Python的小伙伴,Python学习圈

一.根据照片解析定位

不知道你平常拍照片有没有在你手机的设置里仔细查看过,比如说下面这个选项【地理位置】。

打开它之后,我拍的照片上也没有显示地理位置啊?

这是因为这些数据被放在了照片文件数据里面,可能你很难理解,你可以回想一下之前我们说的get之后的响应,响应体分为响应头和响应体。照片的数据也是一样,有信息头(随便叫的)和数据体,信息头里面有你这张照片的各种信息,拍摄时间地点设备等,而数据体就是你用看图软件打开时显示在你眼中的那些了,我们平常关注到的只有数据体,只关心照片是不是好看,而信息头的内容对我们来说其实无关紧要。

下面是我之前拍的一张照片经过解析获得的信息头数据,从里面可以看到照片尺寸,我的Make设备是HUAWEI,我的镜头数据,时间等等。

在Python中我们可以使用exifread库来解析图片的头信息。

pip install exifread

调用exifread的process_file方法,参数传入file,就可以得到照片的exif信息了。

img_exif = exifread.process_file(open("路径", 'rb'))

返回的img_exif是一个字典数据,我们可以直接根据上面那张头数据里面的标题来拿到对应的数据。

# 纬度数

latitude_gps = img_exif['GPS GPSLatitude']

# N,S 南北纬方向

latitude_direction = img_exif['GPS GPSLatitudeRef']

# 经度数

longitude_gps = img_exif['GPS GPSLongitude']

# E,W 东西经方向

longitude_direction = img_exif['GPS GPSLongitudeRef']

这样我们就拿到南北纬以及经纬度了。

那么如何根据这些数据来获得定位呢?

我们可以利用高德地图开放的Api来将经纬度转换为我们能够直接读懂的位置信息。

url = 'https://restapi.amap.com/v3/geocode/regeo?key={}&location={}'

上面是高德地图逆向解析定位的api地址,key需要在高德地图官网申请开发者之后拿到(很容易),location就是经纬度南北纬信息了。

resp = requests.get(url.format(api_key, location))

location_data = json.loads(resp.text)

address = location_data.get('regeocode').get('formatted_address')

上面的代码是不是已经很简单了,requests.get请求api拿到对方返回的结果,返回的数据的json数据,所以loads解析之后直接拿address即可。

这样我们就可以拿到这张照片的拍摄地点了。

二.Bilibili弹幕爬虫

先来思考一个问题,B站一个视频的弹幕最多会有多少?

比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的。

也就是说,有一个视频地址为https://www.bilibili.com/video/av67946325,你如果直接去requests.get这个地址,里面是不会有弹幕的,回想第一篇说到的携程异步加载数据的方式,B站的弹幕也一定是先加载当前视频的界面,然后再异步填充弹幕的。

接下来我们就可以打开火狐浏览器(平常可以火狐谷歌控制台都使用,因为谷歌里面因为插件被拦截下来的包在火狐可以抓到,同理谷歌也是)的控制台来观察网络请求了。

经过仔细排查之后,我找到了一个请求xml的,它后面跟了一个oid,查看它的响应内容之后可以发现它就是弹幕文件。

它的响应时间98毫秒,远超其它几个响应,所以说如果把弹幕直接放在视频页面,用户体验一定会很差。

找到弹幕了,爬取它很容易,但是我们想要是爬取固定av号视频的弹幕,而不是说随意去找一个oid来爬取弹幕,这样我们都不知道爬下来的弹幕是哪个视频的。

接下来我们就可以复制oid的117784982值,去视频页面搜索看看了,通过视频来获得它的oid再来爬xml弹幕就很方便了。

这次用了谷歌浏览器,在里面通过搜索oid果然搜索到相关的数据了。

其中cid是弹幕对应的id,aid对应视频av号。

先把这个页面爬取下来。

# encoding: utf-8

import requests

headers = {

'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',

'Accept': 'text/html',

'Cookie': "_uuid=1DBA4F96-2E63-8488-DC25-B8623EFF40E773841infoc; buvid3=FE0D3174-E871-4A3E-877C-A4ED86E20523155831infoc; LIVE_BUVID=AUTO8515670521735348; sid=l765gx48; DedeUserID=33717177; DedeUserID__ckMd5=be4de02fd64f0e56; SESSDATA=cf65a5e0%2C1569644183%2Cc4de7381; bili_jct=1e8cdbb5755b4ecd0346761a121650f5; CURRENT_FNVAL=16; stardustvideo=1; rpdid=|(umY))|ukl~0J'ulY~uJm)kJ; UM_distinctid=16ce0e51cf0abc-02da63c2df0b4b-5373e62-1fa400-16ce0e51cf18d8; stardustpgcv=0606; im_notify_type_33717177=0; finger=b3372c5f; CURRENT_QUALITY=112; bp_t_offset_33717177=300203628285382610"

}

resp = requests.get('https://www.bilibili.com/video/av67946325',headers=headers)

print(resp.text)

拿到了内容我们就要从中解析弹幕id了,对于这种规则紊乱的网页,我们就不能用上一篇中Bs4解析了,而是使用正则表达式。

正则表达式最简单的使用方式其实就是直接match。

re.search(匹配规则,文本).group()

观察这里的内容,我们大致的匹配规则就有了。

cid={目标}&aid=av号

117784982就是我们的目标。

av_id = '67946325'

resp = requests.get('https://www.bilibili.com/video/av'+av_id,headers=headers)

match_rule = r'cid=(.*?)&aid'

oid = re.search(match_rule,resp.text).group().replace('cid=','').replace('&aid','')

print('oid='+oid)

先根据av号拿到视频页面,然后解析视频页面拿到oid,最后用oid去请求xml弹幕文件。

xml_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid='+oid

resp = requests.get(xml_url,headers=headers)

print(resp)

这样我们就完成B站弹幕爬虫了。

python爬虫和定位_Python网络爬虫实战(三)照片定位与B站弹幕相关推荐

  1. python爬虫和定位_Python网络爬虫实战,照片定位与B站弹幕!

    之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就可以开始第一次实战了. Python资源共享群:626017123 这篇实战包含两个内容. * 利用爬虫调用Api来解析照片的拍摄位 ...

  2. python sub 不区分大小写_Python网络爬虫入门篇

    1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. Python入门篇:https://www.cnblo ...

  3. python爬虫实践报告_Python网络爬虫从入门到实践

    本书讲解了如何使用Python编写网络爬虫,涵盖爬虫的概念.Web基础.Chrome.Charles和Packet Capture抓包.urllib.Requests请求库.lxml.Beautifu ...

  4. python网络爬虫基础知识_Python网络爬虫基础知识

    一.网络爬虫 网络爬虫又被称为网络蜘蛛,我们可以把互联网想象成一个蜘蛛网,每一个网站都是一个节点,我们可以使用一只蜘蛛去各个网页抓取我们想要 的资源.举一个最简单的例子,你在百度和谷歌中输入'Pyth ...

  5. python网络爬虫文献综述_python网络爬虫综述

    本文主要是个人python学习过程中的碎碎念想,希望对感兴趣的童鞋有所帮助. 百度百科上网络爬虫的定义是:"网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者 ...

  6. python 爬虫热搜_Python网络爬虫之爬取微博热搜

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 1.分析网页的源代码:右键--查看网页源代码. 从网页代码中可以获取到信息 (1)热搜的名字都在 的子节点里 (2)热搜的排名都在 ...

  7. python网络爬虫资源库名_Python网络爬虫

    网友NO.524767 Python网络爬虫与信息提取(实例讲解) 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.B ...

  8. python网络爬虫系列教程_Python网络爬虫系列教程连载 ----长期更新中,敬请关注!...

    感谢大家长期对Python爱好者社区的支持,后期Python爱好者社区推出Python网络爬虫系列教程.欢迎大家关注.以下系列教程大纲,欢迎大家补充.视频长期连载更新中 --------------- ...

  9. python网络爬虫的特点_Python网络爬虫(一)- 入门基础

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

最新文章

  1. http简介看这篇就够了
  2. Contest - 2014 SWJTU ACM 手速测试赛(2014.10.31)
  3. 国企程序员是一种怎样的体验?
  4. SQL Server 中使用 Try Catch 处理异常
  5. 资源包技巧和最佳实践
  6. HTH的完整形式是什么?
  7. 云计算技术的跃进睿云智合专业先进水平
  8. 菜鸟postman接口测试_postman 接口测试(转)
  9. 赠书 | 什么是 Knative?
  10. 【BAT面试现场】如何判断一个数是否在40亿个整数中?
  11. 微型计算机内存主要,微型计算机的内存容量主要指 ( ) 的容量 (7.0分)
  12. python基础分析_数据分析之Python基础
  13. 锐捷服务器虚拟化技术_交换机虚拟化技术.ppt
  14. IT项目经理如何正确做好项目实施
  15. Ureport2小计和合计功能
  16. 2020-09-04 CD40193十六进制加减Multisim仿真
  17. Failed to start LSB: Enable AMQP service provided by RabbitMQ broker.
  18. 调试winddows程序(windbg 和 Debug Diagnostic Tool)
  19. 【iCheck基本用法的使用】
  20. GPU加速原理浅析及代码实现

热门文章

  1. Apollo无人驾驶课程笔记 第四课-感知
  2. 铁乐学python_day18-19_面向对象编程1
  3. 数据存储策略——lsm-tree
  4. Flume部署安装详细图文步骤(单节点)
  5. 数采物联仪表照片抓拍AI图像识别软件使用说明
  6. 【计算机组成原理】-09
  7. 作业11 最优前缀编码
  8. 某网站登录页面存在用户手机号信息泄露
  9. uniapp 小程序横屏处理方案
  10. linux终端能显示中文,但是不能输入中文的解决方法