三分鐘爬蟲入門

Laical發表於2020-05-18

想要採集資料,要明確要得到的內容是什麼?是HTML原始碼,還是Json格式的字串等。

抓取大多數情況屬於get請求,即直接從對方伺服器上獲取資料。

Python中自帶urllib及urllib2這兩個模組,基本上能滿足一般的頁面抓取。

urllib 是 Python 自帶的庫,可以用來進行網路資料的收集和下載。

from urllib import request

url=’time.geekbang.org/'

response=request.urlopen(url,timeout=1)

print(response.read().decode(‘utf-8’))

只需 4 行,就可以拿到極客時間的首頁網頁程式碼。當然,你會發現首頁網頁的程式碼只有一部分,這是因為極客時

間的大量資料都是通過 JS 請求後臺載入的。

1、get 方法傳送資料

此外,對於帶有查詢欄位的url,get請求一般會將來請求的資料附在url之後,以?分割url和傳輸資料,多個引數用&連線。

import requests data = {‘wd’:’nike’, ‘ie’:’utf-8’} url=’https://www.baidu.com' response = requests.get(url=url, params=data)

如下示例:

三分鐘爬蟲入門
2、post 方法傳送資料

預設的請求格式是 application/x-www-form-urlencoded

from urllib import request

from urllib import parse

data=bytes(parse.urlencode({‘word’:’hello wlzcool’}),encoding=’utf8’)

url=’httpbin.org/post'

response=request.urlopen(url,data=data)

print(response.read().decode(‘utf-8’))

如下示列:

{

“args”: {},

“data”: “”,

“files”: {},

“form”: {

“word”: “hello wlzcool”

},

“headers”: {

“Accept-Encoding”: “identity”,

“Content-Length”: “18”,

“Content-Type”: “application/x-www-form-urlencoded”,

“Host”: “httpbin.org”,

“User-Agent”: “Python-urllib/3.6”,

“X-Amzn-Trace-Id”: “Root=1-5e819df5-cc1d4ab38f5b4a59c23d09e9”

},

“json”: null,

“origin”: “”,

“url”: “http://httpbin.org/post"

}

修改 User-Agent

有些網站會檢查你是不是真的瀏覽器訪問,還是機器自動訪問的。這種情況,加上User-Agent,表明你是瀏覽器訪問即可。有時還會檢查是否帶Referer資訊還會檢查你的Referer是否合法,一般再加上Referer。

User-Agent可以用億牛雲提供給的真實庫,Referer的來源可以偽裝成百度搜尋來的。

headers = {‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.1276.73 Safari/537.36’, ‘Referer’:’https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=nike'} response = requests.get(url=url, headers=headers)

如果想真正的做好一個爬蟲,需要自己努力學習python爬蟲知識,網路爬蟲有很多限制,需要自己去實踐研究,做好爬蟲程式的相關優化,累計經驗,才能採集到想要的資料。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章