Python爬蟲urllib筆記整合

2021-08-21 01:42:19 字數 3566 閱讀 7398

程式一:爬取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狀態碼,我們可以知道我們的訪問是否成功...