程式一:爬取post網頁檔案。
第一步:進行網頁爬取的關鍵在於了解網頁結構,清楚網頁**,找到自己需要的網頁內容(一般指所在標籤,類別,樣式等)是什麼;本次程式是找到post表單所在位置並了解必須傳遞的引數是什麼。
第二步:匯入urllib的抓包(parse),引數名與表單中的name屬性一致,寫入表單傳遞引數;
第三步:使用urllib請求網頁並提交引數。
#爬取post網頁檔案
import urllib.request
import urllib.parse #抓包
from urllib.request import urlopen
#from urllib import urlencode
url = ""
login = urllib.parse.urlencode().encode("utf-8")
req = urllib.request.request(url,login) #傳送位址和提交變數
#req.add_header()#偽裝成對應瀏覽器
data = urllib.request.urlopen(req).read()
text = data.decode("gb2312")
fh = open("e:/python/test/sinalogin.html","wt") #開啟檔案並寫入
fh.write(text)
fh.close()
print(text)
程式二:爬蟲異常處理
python常用異常處理為try.....except,本次主要是用urllib自帶的錯誤請求處理,其中urlerror出現的幾種原因:連線伺服器失敗,遠端url不存在,本地網路未連線,觸發httperror子類。程式如下:
import urllib.error
import urllib.request
try:
urllib.request.urlopen("")
except urllib.error.urlerror as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
程式三:模擬瀏覽器
有很多**限制爬蟲,所以需要傳遞一些引數來模擬成瀏覽器請求網頁。大部分的網頁可能只需要傳遞標頭(user-agent)就行了,但有的網頁反爬技術更強,就需要傳遞多個引數或者**ip才能請求到網頁。
程式如下:
url = "/"
headers = ("user-agent","mozilla/5.0 (windows nt 10.0; win64; x64; rv:59.0) gecko/20100101 firefox/59.0")
opener = urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener) #將opener物件新增為全域性
data = urllib.request.urlopen(url).read().decode("utf-8","ignore")
pat='程式四:實現ip**
前面已經提到過,有些**的反爬較嚴,在乙個ip請求頻繁的情況下,極有可能出使用ip被封的情況,那麼,**ip就很有必要。
**ip可以從網上獲取免費的,也可以直接購買。下面的程式就是實現**ip:
#實現ip**
opener.addheaders=[headers] #執行標頭
urllib.request.install_opener(opener) #新增全域性變數
data = urllib.request.urlopen(url).read().decode("utf-8","ignore")
return data
if __name__ == '__main__':
proxy_addr = "119.28.152.208:80" #**:
url = ""
headers = ("user-agent","mozilla/5.0 (windows nt 10.0; win64; x64; rv:59.0) gecko/20100101 firefox/59.0")
data = use_proxy(url,headers,proxy_addr)
print(len(data))
本例項主要涉及有兩個問題:一是構建網頁鏈結和實現翻頁,其中關鍵字編碼的問題,使用了quote函式,將中文關鍵字轉化為網頁鏈結所展示格式;二是用正則匹配到所在位置,提取。其他不多說,直接上**:
import urllib.request
import re
keyname="連衣裙"
python爬蟲(urllib簡介)
通過url開啟任意資源,官方鏈結 urllib模組提供乙個高階介面,可以在通過url在網上獲取資料。其中,urlopen 函式類似於內建函式open 但接受的是url不是檔名。只能開啟用於讀取的url,不能任何查詢操作。urllib.urlopen url data prpxies context ...
python 網路爬蟲 urllib
1.網域名稱與ip位址 網域名稱 dns伺服器 ip位址 你的電腦先把網域名稱傳給dns伺服器,通過dns伺服器找到網域名稱所對應的ip位址,在傳回你的電腦進行訪問。2.呼叫urllib進行爬取 讀取資料 import urllib f urllib.urlopen print f.read 讀取狀...
python爬蟲之urllib 二
urllib.error可以接收urllib.request產生的異常,urllib.error有三個方法,如下 urlerror是oserror的乙個子類,httperror是urlerror的乙個子類,伺服器上http的響應會返回乙個狀態碼,根據這個http狀態碼,我們可以知道我們的訪問是否成功...