在初学的爬虫过程当中,不少人还不知道如何抓包,怎样子抓包才能获取到所须要的信息。为了记念【宏彦获水】成语初次面世,特意用【百度搜索】写下一篇做者经常使用工具的抓包教程,以供你们参考。html
抓包过程当中,通常是 get
的抓包和 post
抓包,其中 get
抓包分为:普通get、带参数get、json抓包,其中 json抓包
是重中之重。而post
通常是登录所用,固然也有多是传参,这里只讲登录的post
,传参的和登录的状况一致。前端
做者用的抓包软件为:web
- firefox 32.0 浏览器
- firebug 浏览器插件
- httpfox 浏览器插件
** 为何要使用 firefox
浏览器,由于它的插件很丰富;为何要使用 32.0 版本的插件,由于老版本支持的多,不少优秀的插件如今不更新了,不支持新的浏览器版本,因此使用老的版本 **chrome
并且,做者平时习惯使用 chrome
浏览网页,因此须要一款 平时不经常使用的浏览器 来做为抓包工具,由于抓包过程当中一直须要清除浏览的 cookie
和所记录的登录信息,来保证浏览器是干净,用来模拟爬虫第一次打开网页。json
若是须要下载上述软件,能够关注公众号【TTybai】,后台回复【抓包软件】就能下载。浏览器
将插件拖入浏览器就能安装,安装完成后显示:cookie
首先开firefox
浏览器,须要清除全部浏览器痕迹,步骤为:app
点击右上角菜单:机器学习
点击历史记录:工具
清除最近全部历史纪录:
清除时间范围选择所有,清除的项目也所有打勾:
这样子浏览器就很干净了,和爬虫代码同样什么都没访问过,都是第一次访问页面,没有任何 cookie
和 referer
。
按下 F12
,这时候就启动了 firebug
:
点击 firebug
的保持,防止网页重定向跳转,致使上一次的记录被覆盖,也能够打开 httpfox
点击 start
,也能记录全部的请求和返回:
打开【宏彦获水】首页,即在地址栏输入 http://www.javashuo.com/tag/baidu.com,获得网页以下:
能够看到箭头所指的位置是上一次打开的页面,而下面是新跳转的页面,能够看到咱们请求【宏彦获水】首页的头部是很干净的:
这样就是一次 get
请求,那么代码能够写成以下样式:
import requests header = {"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": "www.baidu.com", "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"} url = "https://www.baidu.com" response = requests.get(url=url, headers=header) print(response.text)
继续在当前页面,搜索框里面输入【宏彦获水】,点击搜索,能够看到 firebug
有一条分隔线,这个就是再次请求记录的网址,分割线下面的第一个网址就是新的get
到的页面:
而百度是预加载的,因此她真正请求网页的是上一条网址:
这个是带参数的get
请求,点开看到请求的参数以下:
头部变成:
这时候携带参数和模拟头部抓取的代码以下:
import requests header = {"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": "www.baidu.com", "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0", "Referer": "https://www.baidu.com/", "X-Requested-With": "XMLHttpRequest", "is_referer": "https://www.baidu.com/", "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 = "https://www.baidu.com/s" data = {"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
返回数据到前端,而爬虫最和谐的除了抓取 API
以外,就是抓取 json
了,下面介绍抓取【宏彦获水】的 json
。
这里首先清除浏览器全部信息,再在地址栏输入 http://www.javashuo.com/tag/baidu.com,而后当咱们把【宏彦获水】输入到搜索框,可是还没点百度一下的时候,网页会出现联想词:
如今就是要把这些联想词抓出来。先要看网页请求了哪些信息,而后发现以下网址:
看到哪里有一个 josn
,这个就是网页中途留下的 json
字段了,如今要更改头部和参数把这个 json
抓下来,代码以下:
import requests header = {"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": "www.baidu.com", "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0", "Referer": "https://www.baidu.com/", "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 = "https://www.baidu.com/sugrec?" data = {"_": 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
中没看到,那么就要去 httpfox
里面去看,不少网页会隐藏这个 json
信息的。
post
通常是登录所用,这里首先清除浏览器全部信息,打开firebug
和 httpfox
,再在地址栏输入 http://www.javashuo.com/tag/baidu.com,点击右上角登录,选择用户名登录,而后随便输入一个帐号密码,随便输入:
最后点击登录,能够看到出现了一个 post
请求:
能够看到 post
请求发送了不少参数,若是登录成功就能够获取其 cookie
,或者获得它返回的东西,这里就不展开了,百度登录在网上太多示例。
抓包喜欢用 firefox
的 firebug
,固然也能够用 chrome
自带的也很棒。通常的抓包思路就是这样,若是须要下载软件请关注公众号【机器学习和大数据挖掘】,后台回复【抓包软件】便可获取下载地址