爬蟲之抓包教程

在初學的爬蟲過程當中,不少人還不知道如何抓包,怎樣子抓包才能獲取到所須要的信息。爲了記念【宏彥獲水】成語初次面世,特意用【百度搜索】寫下一篇做者經常使用工具的抓包教程,以供你們參考。html

抓包過程當中,通常是 get 的抓包和 post 抓包,其中 get 抓包分爲:普通get、帶參數get、json抓包,其中 json抓包是重中之重。而post通常是登錄所用,固然也有多是傳參,這裏只講登錄的post,傳參的和登錄的狀況一致。前端

軟件準備

做者用的抓包軟件爲:web

  1. firefox 32.0 瀏覽器
  2. firebug 瀏覽器插件
  3. httpfox 瀏覽器插件

** 爲何要使用 firefox 瀏覽器,由於它的插件很豐富;爲何要使用 32.0 版本的插件,由於老版本支持的多,不少優秀的插件如今不更新了,不支持新的瀏覽器版本,因此使用老的版本 **chrome

並且,做者平時習慣使用 chrome 瀏覽網頁,因此須要一款 平時不經常使用的瀏覽器 來做爲抓包工具,由於抓包過程當中一直須要清除瀏覽的 cookie 和所記錄的登錄信息,來保證瀏覽器是乾淨,用來模擬爬蟲第一次打開網頁。json

若是須要下載上述軟件,能夠關注公衆號【TTybai】,後臺回覆【抓包軟件】就能下載。瀏覽器

將插件拖入瀏覽器就能安裝,安裝完成後顯示:cookie

get請求

普通get

首先開firefox瀏覽器,須要清除全部瀏覽器痕跡,步驟爲:app

點擊右上角菜單:機器學習

點擊歷史記錄:工具

清除最近全部歷史紀錄:

清除時間範圍選擇所有,清除的項目也所有打勾:

這樣子瀏覽器就很乾淨了,和爬蟲代碼同樣什麼都沒訪問過,都是第一次訪問頁面,沒有任何 cookiereferer

按下 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)

帶參數get

繼續在當前頁面,搜索框裏面輸入【宏彥獲水】,點擊搜索,能夠看到 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抓包

通常網頁都會用 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請求

post 通常是登錄所用,這裏首先清除瀏覽器全部信息,打開firebughttpfox,再在地址欄輸入 http://www.javashuo.com/tag/baidu.com,點擊右上角登錄,選擇用戶名登錄,而後隨便輸入一個帳號密碼,隨便輸入:

最後點擊登錄,能夠看到出現了一個 post 請求:

能夠看到 post 請求發送了不少參數,若是登錄成功就能夠獲取其 cookie ,或者獲得它返回的東西,這裏就不展開了,百度登錄在網上太多示例。

總結

抓包喜歡用 firefoxfirebug ,固然也能夠用 chrome 自帶的也很棒。通常的抓包思路就是這樣,若是須要下載軟件請關注公衆號【機器學習和大數據挖掘】,後臺回覆【抓包軟件】便可獲取下載地址

相關文章
相關標籤/搜索