python爬蟲流程
主要分為三個部分 (1)獲取網頁-------->(2)解析網頁(獲取資料)--------->儲存資料
三個流程的技術實現
1.獲取網頁
-獲取網頁的技術基礎:urllib、requests、selenium
-獲取網頁的高階技術:多執行緒抓取、登入抓取、突破ip限制和伺服器抓取
2.解析網頁
-解析網頁的技術基礎:re正規表示式、beautifulsoup和xml
-解析網頁的高階技術:解決中文亂碼問題
3.儲存資料
-儲存資料的基本技術:存入txt檔案和存入csv檔案
-儲存資料的高階技術:儲存mysql、mongodb資料庫中
搭建python爬蟲的平台
python的安裝
整合環境anaconda的安裝
使用pip工具安裝第三方庫
urllib.request
urllib中,request這個模組主要負責構造和發起網路請求,並在其中加入headers,proxy等。
發起get請求
主要使用urlopen()方法發起請求
from urllib import request
resp = request.urlopen('') type(resp)
print(resp.read().decode()) 資料為二進位制資料需轉碼
發起post請求
urlopen()預設的訪問方式為get,當在urlopen()方法中傳入data引數時,則會發起pose請求
注意:傳入的data資料需要為bytes格式
設定timeout引數還可以設定超時時間,如果請求時間超出,那麼會丟擲異常
from urllib import request
resp = request.urlopen('', data=b'word=hello', timeout=10)
print(resp.read().decode())
新增headers
通過urllib發起的請求會有預設的乙個headers:"user-agent":python-urllib/3.6",指明請求是由urllib傳送的。
**所以遇到一些驗證user-agent的 **時,我們需要自定義headers,而這需要借助於urllib.request中的request物件。
from urllib import request
url = '/get'
headers =
**需要使用url和headers生成乙個request物件,然後將其傳入urlopen方法中
req = request.request(url, headers=headers)
resp = request.urlopen(req)
print(resp.read().decode())
request物件
如上所示,urlopen()方法中不止可以傳入字串格式的url,也可以傳入乙個request物件來擴充套件功能。request物件如下所示:
class urllib.request.request(url, data=none, headers={}, origin_req_host=none, unverifiable=false, method=none)
構造request物件必須傳入url引數, data資料和headers都是可選的。
request方法可以使用method引數來自由選擇請求的方法,如put, delete等等,預設為get方法。
新增cookie
為了在請求時能帶上cookie資訊,我們需要重新構造乙個opener
使用request.build_opener方法進行構造opener,將我們想要傳遞的cookie配置到opener中,然後使用這個opener的open方法來發起請求。
Python爬蟲基本流程
爬蟲定義 爬蟲基本流程 發起請求 通過url向伺服器傳送requests請求,請求可以包含額外的header資訊。2.獲取響應內容 解析內容 如果是html 則可以使用網頁解析器進行解析 如果是json資料則可以轉換成json物件進行解析 如果是二進位制資料則可以儲存到檔案進行進一步的處理。儲存資料...
python爬蟲 (2)爬蟲基本流程
網路爬蟲 又被稱為網頁蜘蛛,網路機械人,在foaf社群中間,更經常的稱為網頁追逐者 是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。另外一些不常使用的名字還有螞蟻 自動索引 模擬程式或者蠕蟲。其實通俗的講就是通過程式去獲取web頁面上自己想要的資料,也就是自動抓取資料 模擬瀏覽器開啟...
爬蟲學習 爬蟲基本流程
標籤 空格分隔 資料探勘 爬蟲 1 發起請求 2 獲取相應內容 3 解析網路內容 4 儲存資料 結構化儲存 user server request server user response 1 請求方式 get,post,head,put,delete 2 get和post的區別 請求的引數包含的部...