前言
好久没更新,不知道各位粉丝有没有等着急,没办法,这不是要到年底了啊,又要开始准备一年一度的工作汇报了,咱到现在也不知道这玩意到底有什么用,反正就是每一家公司都需要这么个玩意,其中,最让我头疼的就是这个未来展望的环节,我要是能预测未来我不早就去买彩票发大财,还在这给你写什么规划。但是谁让你是老大呢,哎,所以,没办法,就是从网上各种找资料或者一些数据,写未来的规划,正好的,反正也是年底了,没啥事干,闲着也是闲着,就接了几个兼职的单子,赚点钱回家给小辈发红包啊!不知道大家有没有遇到这样的困境
再网上查找一些资料的时候,发现在网上对于python爬虫的案例讲解比较少,并且比较散,反正最近我从网上找资料,甚至是兼职的单子都是跟爬虫相关,今天就给大家简单介绍一下爬虫的相关内容,大家没啥事也可以自己练习着玩一下嘛
公众号:Java架构师联盟
开发环境
开发工具:pycharm
开发环境:python3.8.5
原理讲解
其实说起来爬虫,简单点的理解,就是我们要去将我们在网页上查看的内容中的某一部分保存到本地,为什么这么说呢?
举个例子,大家都知道,我们在浏览器上浏览某个网站信息的时候,其实他是去后台请求相应的数据,然后,后台服务器相应这个数据请求,将数据返回到我们的前端界面(也就是你能看到的业面),如果这么说有点复杂的话,那结合一张图我们来看一下
img这个过程通俗点来说就是:
浏览器提交请求->下载网页代码->解析/渲染成页面
而爬虫要做的其实就很简单了,也很好理解,既然你在浏览器中查看某些信息的时候,是执行的一个和服务器之间进行通信的过程,那你现在要求的不就是模拟浏览器的一个行为,然后将数据存储到本地吗?
流程如下:
模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中
用一张图解释就是下面这样的** **
img实现流程
既然前面我们整理清楚了爬虫的一个工作原理,接下来不就简单了啊,我们就是看一下代码实现流程,写代码是最没有技术含量的
第一、获取数据的请求地址
因为现在是我们要模拟浏览器的一个行为,那我们最起码要知道数据的一个请求地址。也就是url,我今天提供给大家的源码时爬取B站弹幕,那我就以此为例进行讲解
那url我们该怎么查找,首先,前面的时候我说了,我们在前面说了,我们要先模拟一个网站发起一个request请求,那我们要去查看的应该就是一个request的url
注:什么是request
使用http库向目标站点发起请求,即发送一个Request
Request包含:请求头、请求体等
</pre>
我们按F12打开开发者模式,然后在页面中点击弹幕列表,在选择要查看的弹幕日期之后,在下方控制台中会出现一个history开头的选项,点击,我们会看到request url的选项
第二、模拟用户请求
主要包括两个方面,用户模拟以及登陆模拟
用户模拟
因为我们现在是模拟浏览器向服务器发起请求,就好像有一个陌生人来敲你家的门一样,这样的情况,你会开门吗?不会,那如果我们伪装成亲戚朋友的话,你就开门了把,在请求中,我们有一个用户代理(user-agent)来表明我们的身份选项** **
注:
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
img登陆模拟
上面的问题解决了,同时也引出了下一个问题,我们在进行这个信息查看的时候,是通过一个已经登陆的账号,当你在未登陆的情况下** **
img你是无法查看这个历史的弹幕数据的,那我们在模拟的时候如何模式登陆行为的呢
这个时候,不得不提的就是浏览器的一个行为,当我们登录某个网站之后,再次访问的时候,很多时候是不需要再次登录的,那这是为什么呢?是因为当你登录之后,浏览器会在本地生成一个cookie的问题件,cookie与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。这样一来也就完成了我们的直接访问行为
img也就是说,只要我们获取这个cookie,我们在访问后台服务器的时候,也是不需要什么登陆操作的,一气呵成
第三步:请求数据
经历上面的步骤,我们已经成功的向服务器发起请求,当你执行前面几步得操作后,你会得到这样的一个结果
img这说明,我们成功和服务器进行了链接
响应状态
200:代表成功
301:代表跳转
404:文件不存在
403:权限
502:服务器错误</pre>
接下来我们要通过我们传入的user-agent以及cookie来确立我需要哪些数据,获取url请求过来的数据
也就是这样的一个结果
img第四步,数据分析
到第三步,我们已经获取完成了相应的数据信息,但是我们只需要其中的一部分,所以要进行解析,留下的是我们自己需要的数据
第五步,数据存储
解析完成的数据,我们保存到本地,至此,数据爬取的工作完成
好了,一个数据爬虫的工作到这里就结束了,希望大家没啥事的时候可以自己动手实际操作一下,下面是我实现的代码,大家可以自己参考
代码实现
为了照顾刚接触这个的朋友,所以这里我写的会相对的详细一些,其中一些细小的知识点就不展开讲解了,毕竟我还要写苦逼的年终总结
# 爬取B站弹幕
# 什么是模块:模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里
import requests
url='https://api.bilibili.com/x/v2/dm/history?type=1&oid=260575715&date=2020-12-20'
# 如何获取路径下的信息
# urllib(python自带的) request(第三方模块)
# 字典:字典是python里的一种数据类型,特点是元素的无序性,和键key的唯一性。字典的创建方法是{key:values}
getdata=requests.get(url)
print(getdata)
headers={
#user-agent,就好像我们去一个人家串门,但是,如果主人不认识你,肯定不会给你开门,但是,如果你伪装成一个他认识的人,就像易容一样,那他是不是就给你开门了啊
# 模拟浏览器的行为
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
#cookie:我们在登录的时候会进行用户名和密码的输入,之后我们在登陆的时候就不需要再进行登陆了,那这个地方就是因为,这个账号和密码信息缓存到一起
# 你要自己实现的时候要换成自己的哦
'cookie': "_uuid=326F06D1-FE8D-9191-42CE-DD309D14353C67633infoc; buvid3=33D869DB-6F2F-4BB0-B607-1B7B34F07CFD53925infoc; sid=4lmxv7lu; rpdid=|(u)Y|l|uJRk0J'ulmJY|kRR|; dy_spec_agreed=1; LIVE_BUVID=AUTO2815973097085458; blackside_state=1; CURRENT_FNVAL=80; bp_video_offset_26390853=467157764523510086; bp_t_offset_26390853=467157764523510086; fingerprint=073aaf7f9d22ae55cfafd954c7f31b26; buivd_fp=33D869DB-6F2F-4BB0-B607-1B7B34F07CFD53925infoc; buvid_fp_plain=BCE2280A-DF5C-4872-98E2-4002159A716F143082infoc; PVID=3; bfe_id=fdfaf33a01b88dd4692ca80f00c2de7f; buvid_fp=33D869DB-6F2F-4BB0-B607-1B7B34F07CFD53925infoc; DedeUserID=26390853; DedeUserID__ckMd5=8d24b1d50476c5e5; SESSDATA=c6386003%2C1624877887%2Ca501d*c1; bili_jct=704cf795ee7a134f74dd244b80c5107d"
}
resq = requests.get(url,headers=headers)
resq.encoding='utf-8'
print(resq.text)
#<d p="25.25400,1,25,16777215,1608370925,0,aded156e,42587259146338307">别啊,我的快乐啊</d>
# 使用python进行编程,一定要注意导入
import re
data=re.findall(r'<d p=".*?">(.*?)</d>',resq.text)
# 缓存 cookie
print(data)
# as 起别名
import pandas as pd
# 改变格式之后的数据
test=pd.DataFrame(data=data)
test.to_csv('e:/testcsv.csv',encoding='utf-8')</pre>
刚刚接触python的小伙伴,可以每获取一步数据就打印一次,这样可能对于你的理解有一定的帮助
网友评论