python爬蟲主要分為三大板塊:抓取資料,分析資料,儲存資料。
簡單來說,爬蟲要做就是通過指定的url,直接返回使用者所需資料,無需人工一步步操作瀏覽器獲取。
1.抓取資料
一般來說,訪問**url給我們返回兩種格式資料,html和json。
1) 無參
抓取資料的大多數屬於get請求,我們可以直接從**所在伺服器獲取資料。在python自帶模組中,主要有urllib及urllib2,requests等。
這裡以requests為例。
requests:2)帶參此外,還有一種是以帶參的形式抓取資料,引數一般附在url結尾,首個引數以"?"連線,後續參與以"&"連線。import requests
response = requests.get
(url)
content = requests.get
(url).content
content = requests.get
(url).json()
"response headers:
", response.headers
"content:
", content
data =2.登入情況處理1) post表單登入先向伺服器傳送表單資料,伺服器再將返回的cookie存入本地。requests:data為dict,json
import requests
response = requests.get(url=url, params=data)
data =2) 使用cookie登陸使用cookie登入,伺服器會認為你是乙個已登入使用者,會返回乙個已登入的內容。需要驗證碼的情況,我們可以考慮此方式解決。requests:data為dict,json
import requests
response = requests.post(url=url, data=data)
import requests3.反爬蟲機制處理我們知道,現在很多**都做了反爬蟲機制處理。requests_session =requests.session()
response = requests_session.post(url=url_login, data=data)
相信我們都遇到,當我們爬取某個**的時候,第一次爬取可以,第二次可以,第三次就報失敗了,會提示ip限制或者訪問過於頻繁報錯等。
針對於這種情況,我們有幾種方法解決。
1) 使用**
主要是用於"限制ip"位址情況,同樣也可以解決頻繁訪問需要驗證碼的問題。
我們可以維護乙個**ip池,網上可以查到很多免費的**ip,我們可以選擇我們所需要的。
proxies =2)時間限制解決頻繁訪問導致訪問受限問題。遇到這種情況很簡單,我們需要放緩兩次點選之間的頻率即可,加入sleep函式即可。requests:
import requests
response = requests.get(url=url, proxies=proxies)
import time3) 偽裝成瀏覽器訪問當我們看到一些爬蟲**的時候,會發現get請求會有headers頭,這是在偽裝瀏覽器訪問的反盜鏈。time.sleep(
1)
一些**會檢查你是不是真的瀏覽器訪問,還是機器自動訪問的。這種情況,加上user-agent,表明你是瀏覽器訪問即可。
有時還會檢查是否帶referer資訊還會檢查你的referer是否合法,一般再加上referer。
headers = # 偽裝成瀏覽器訪問,適用於拒絕爬蟲的**4) 斷線重連可以參考兩種方法。headers =
headers =
requests:
response = requests.get(url=url, headers=headers)
def multi_session(session, *arg):這樣我們就可以使用multi_session或multi_open對爬蟲抓取的session或opener進行保持。retrytimes = 20
while retrytimes>0
:
try:
return session.post(*arg)
except:
retrytimes -= 1
或
def multi_open(opener, *arg):
retrytimes = 20
while retrytimes>0
:
try:
return opener.open(*arg)
except:
retrytimes -= 1
4.多執行緒爬取
當我們爬取或者資料量過大,可以考慮使用多執行緒。這裡介紹一種,當然還有其他方式實現。
import multiprocessing as5.分析一般獲取的伺服器返回資料主要有兩種,html和json。mpdef func():
pass
p =mp.pool()
p.map_async(func)
# 關閉pool,使其不在接受新的(主程序)任務
p.close()
# 主程序阻塞後,讓子程序繼續執行完成,子程序執行完後,再把主程序全部關掉。
p.join()
html格式資料,可以採用beautifulsoup,lxml,正規表示式等處理
json格式資料,可以採用python列表,json,正規表示式等方式處理
此外,我們可以採用numpy, pandas,matplotlib,pyecharts等模組包做相應的資料分析,視覺化展示等。
6. 儲存
資料抓取,分析處理完後,一般我們還需要把資料儲存下來,常見的方式有存入資料庫,excel**的。根據自己需要選擇合適的方式,把資料處理成合適的方式入庫。
Unity Shader入門精要
學習資料 unity shader入門精要 時長 乙個月 計畫 1 2天完成一章,預計乙個月內完成 幾何階段 gpu實現,輸出螢幕空間的二位點座標,深度,著色資訊,傳送給光柵化階段 光柵化階段 gpu實現,決定每個渲染圖元哪些畫素應該被繪製在螢幕上,將幾何階段傳來的頂點資料進行插值 頂點v法線的獲取...
Python爬蟲入門
今天看了菜鳥教程的python教程,準備做個小作業寫個爬蟲程式。其中主要涉及到基本語法 正規表示式 urllib和re兩個模組。import urllib 載入模組 import re defgethtml url page urllib.urlopen url html page.read ret...
python爬蟲入門
這幾天閒的無聊想做乙個爬蟲來爬取一些 正經 首先選擇用python作為爬蟲的語言。但是沒有接觸過python怎麼辦呢,只能從頭開始學了。python學習位址這個是廖大神寫的乙個python入門,個人感覺寫的非常不錯,在粗略的學習了一遍之後感覺可以開始我的爬蟲之旅了。目標 抓取中妹子的儲存在本地 接下...