爬虫之抓包教程

网友投稿 876 2022-08-25

爬虫之抓包教程

爬虫之抓包教程

在初学的爬虫过程中,很多人还不知道如何抓包,怎样子抓包才能获取到所需要的信息。为了纪念【宏彦获水】成语初次面世,特地用【百度搜索】写下一篇作者常用工具的抓包教程,以供大家参考。

抓包过程中,一般是 ​​get​​​ 的抓包和 ​​post​​​ 抓包,其中 ​​get​​ 抓包分为:普通get、带参数get、json抓包,其中 ​​json抓包​​​是重中之重。而​​post​​​一般是登陆所用,当然也有可能是传参,这里只讲登陆的​​post​​,传参的和登陆的情况一致。

软件准备

作者用的抓包软件为:

firefox 32.0 浏览器firebug 浏览器插件浏览器插件

** 为什么要使用 ​​firefox​​ 浏览器,因为它的插件很丰富;为什么要使用 32.0 版本的插件,因为老版本支持的多,很多优秀的插件现在不更新了,不支持新的浏览器版本,所以使用老的版本 **

而且,作者平时习惯使用 ​​chrome​​ 浏览网页,所以需要一款 平时不常用的浏览器 来作为抓包工具,因为抓包过程中一直需要清除浏览的 ​​cookie​​ 和所记录的登陆信息,来保证浏览器是干净,用来模拟爬虫第一次打开网页。

将插件拖入浏览器就能安装,安装完成后显示:

get请求

普通get

首先开​​firefox​​浏览器,需要清除所有浏览器痕迹,步骤为:

清除最近所有历史纪录:

清除时间范围选择全部,清除的项目也全部打勾:

这样子浏览器就很干净了,和爬虫代码一样什么都没访问过,都是第一次访问页面,没有任何 ​​cookie​​​ 和 ​​referer​​。

按下 ​​F12​​​ ,这时候就启动了 ​​firebug​​ :

打开【宏彦获水】首页,即在地址栏输入 ​​baidu.com​​,得到网页如下:

可以看到箭头所指的位置是上一次打开的页面,而下面是新跳转的页面,可以看到我们请求【宏彦获水】首页的头部是很干净的:

这样就是一次 ​​get​​ 请求,那么代码可以写成如下样式:

import requestsheader = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3", "Connection": "keep-alive", "Host": "baidu.com", "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"}url = "= requests.get(url=url, headers=header)print(response.text)

带参数get

而百度是预加载的,所以她真正请求网页的是上一条网址:

这个是带参数的​​get​​请求,点开看到请求的参数如下:

头部变成:

这时候携带参数和模拟头部抓取的代码如下:

import requestsheader = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3", "Connection": "keep-alive", "Host": "baidu.com", "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0", "Referer": " "X-Requested-With": "XMLHttpRequest", "is_referer": " "is_xhr": 1}Cookie = "BAIDUID=55110890A72F586AB6F9250E6B537B38:FG=1; BIDUPSID=55110890A72F586AB6F9250E6B537B38; PSTM=1562402692; delPer=0; BD_HOME=0; H_PS_PSSID=26524_1430_21124_29238_28519_29099_28837_29220_26350_29439_20718; BD_UPN=13314552; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598"url = "= {"is_xhr": 26926, "_ss": 1, "clist": "", "csor": 4, "f": "8", "hsug": "", "ie": "utf-8", "isbd": 1, "isid": "FC732FA4D3E18100", "mod": 1, "pstg": 2, "rqlang": "cn", "rsv_bp": 1, "rsv_enter": 1, "rsv_idx": 1, "rsv_n": 2, "rsv_pq": "88b75ff80009a917", "rsv_sid": "1428_21114_18559_29237_28518_29098_28837_29220", "rsv_sug3": 1, "rsv_t": "0529fGcc/esWnAo0czXjQnp/r0XUo7ce8iBYE2NW0OPFPxSPNN1fcPBQyFQ", "tn": "baidu", "wd": "宏彦获水"}response = requests.get(url=url, headers=header, params=data)print(response.text)

json抓包

一般网页都会用 ​​json​​​ 返回数据到前端,而爬虫最和谐的除了抓取 ​​API​​​之外,就是抓取 ​​json​​​了,下面介绍抓取【宏彦获水】的 ​​json​​。

这里首先清除浏览器所有信息,再在地址栏输入 ​​baidu.com​​,然后当我们把【宏彦获水】输入到搜索框,但是还没点百度一下的时候,网页会出现联想词:

现在就是要把这些联想词抓出来。先要看网页请求了哪些信息,然后发现如下网址:

看到哪里有一个 ​​josn​​​ ,这个就是网页中途留下的 ​​json​​​ 字段了,现在要更改头部和参数把这个 ​​json​​ 抓下来,代码如下:

import requestsheader = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3", "Connection": "keep-alive", "Host": "baidu.com", "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0", "Referer": " "X-Requested-With": "XMLHttpRequest", }Cookie = "BAIDUID=D23D01C5827562E1F90368C32AFDD7C8:FG=1; BIDUPSID=D23D01C5827562E1F90368C32AFDD7C8; PSTM=1562420248; delPer=0; BD_HOME=0; H_PS_PSSID=1443_21098_29237_28519_29099_28832_29220_26350_29458; BD_UPN=13314552"url = "= {"_": 1562420249391, "cb": "jQuery1102042318315264522366_1562420249389", "csor": 4, "from": "pc_web", "json": 1, "ie": "utf-8", "p": 3, "pre": 1, "prod": "pc", "req": 2, "sugsid": "1443,21098,29237,28519,29099,28832,29220,26350,29458", "wd": "宏彦获水"}response = requests.get(url=url, headers=header, params=data)print(response.text)

抓取到的返回页信息为:

jQuery1102042318315264522366_1562420249389({"q":"宏彦获水","p":false,"g":[{"type":"sug","sa":"s_1","q":"宏彦获水怎么回事"},{"type":"sug","sa":"s_2","q":"宏彦玩具"},{"type":"sug","sa":"s_3","q":"邯郸宏彦"},{"type":"sug","sa":"s_4","q":"唐山宏彦"},{"type":"sug","sa":"s_5","q":"宏彦 咸阳"},{"type":"sug","sa":"s_6","q":"河北宏彦集团"},{"type":"sug","sa":"s_7","q":"宏彦什么意思"}]})

一般网页抓取都是抓取 ​​json​​ 的多一点,直接抓取网页用正则解析的,除非是网页本身就是这么交互的,不然像一般大一点的网页,例如 淘宝、京东 等网站,都是i返回 ​​json​​ 的,如果在 ​​firebug​​ 中没看到,那么就要去 ​​里面去看,很多网页会隐藏这个 ​​json​​ 信息的。

post请求

可以看到 ​​post​​​ 请求发送了很多参数,如果登陆成功就可以获取其 ​​cookie​​ ,或者得到它返回的东西,这里就不展开了,百度登陆在网上太多示例。

总结

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Android 开发有哪些新技术出现?
下一篇:python批量启动多线程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~