python爬蟲之基本類庫
簡單梳理一下爬蟲原理:
1、傳送請求
通過HTTP庫向目標站點發起請求,即傳送一個Request,請求可以包含額外的headers等資訊,等待伺服器響應。
2、獲取響應內容
如果伺服器能正常響應(正常響應返回狀態碼通常為200),會得到一個Response,Response的內容便是所要獲取的頁面內容,型別可能有HTML,Json字串,二進位制資料(如圖片視訊)等型別
3、解析返回的資料
伺服器返回的內容可以使html,也可以是json。如果是html,可以通過網頁解析庫和正則表示式解析html,得到想要的內容;若是json,則直接通過解析json資料
4、儲存資料
解析得到目標資料後,進行儲存,儲存的方式根據自己的需求而定,可以使資料庫(MySql,SQLServer,MongoDB,Redis),也可以是文字,如Excel,txt等
以上介紹的是爬蟲的基本原理,在實際爬取資料中,我們可能會遇到爬取需要登入的網站的資料(這裡就需要用到獲取登入的cookies,並在傳送請求時當做引數傳入,以保持登入的狀態),還有可能會遇到反爬蟲的一些情況(如封ip等)。
Python爬取資料基本類庫之Urllib
1)獲取請求網頁資訊
from urllib import request response=request.urlopen("http://httpbin.org/") print(response.read().decode("utf-8"))#response.read(),讀取網頁返回資訊 #對於有些網站,直接請求網址,是獲取不到想要的網頁資訊,還必須加入請求頭(如:百度) headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400", "Host":"http://www.baidu.com"} req=request.Request(url='http://www.baidu.com',headers=headers) response=request.urlopen(req)
2)傳送post請求
url="http://httpbin.org/post" headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400", "Host":"httpbin.org"} dict={ "name":"Germey"} data=bytes(parse.urlencode(dict),encoding="utf8") req=request.Request(url=url,data=data,headers=headers,method="POST") response=request.urlopen(req) print(response.read().decode("utf8"))
3)設定代理
proxy_handler=urllib.request.ProxyHandler({ "http":"http://127.0.0.1:8000", "https":"https://127.23.89.238:8000" }) opener=urllib.request.build_opener(proxy_handler) response=opener.open("http://www.baidu.com") print(response.read())
4)獲取請求cookie資訊
import http.cookiejar,urllib.request cookie=http.cookiejar.CookieJar() handler=urllib.request.HTTPCookieProcessor(cookie) opener=urllib.request.build_opener(handler) response=opener.open("http://www.baidu.com") for item in cookie: print(item.name+"="+item.value)
#cookie儲存為檔案物件
filename="cookie.txt"
cookie=http.cookiejar.MozillaCookieJar(filename)
handler=urllib.request.HTTPCookieProcessor(cookie)
opener=urllib.request.build_opener(handler)
response=opener.open("http://www.baidu.com")
cookie.save(ignore_discard=True,ignore_expires=True)
#cookie以LWPC形式儲存
filename="LWPCcookie.txt"
cookie=http.cookiejar.LWPCookieJar(filename)
handler=urllib.request.HTTPCookieProcessor(cookie)
opener=urllib.request.build_opener(handler)
response=opener.open("http://www.baidu.com")
cookie.save(ignore_discard=True,ignore_expires=True)
#讀取儲存的cookie
cookie=http.cookiejar.LWPCookieJar()
cookie.load("LWPCcookie.txt",ignore_expires=True,ignore_discard=True)
handler=urllib.request.HTTPCookieProcessor(cookie)
opener=urllib.request.build_opener(handler)
response=opener.open("http://www.baidu.com")
print(response.read().decode("utf8"))
以上就是urllib的基本用法。