1. 程式人生 > >python爬蟲之基本類庫

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的基本用法。