[Python]網路爬蟲(二):利用urllib通過指定的URL抓取網頁內容
1.基本方法
urllib.request.
urlopen
(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
- url: 需要開啟的網址
- data:Post提交的資料
- timeout:設定網站的訪問超時時間
直接用urllib.request模組的urlopen()獲取頁面,page的資料格式為bytes型別,需要decode()解碼,轉換成str型別。
1 from urllib importrequest 2 response = request.urlopen(r'http://python.org/') # <http.client.HTTPResponse object at 0x00000000048BC908> HTTPResponse型別 3 page = response.read() 4 page = page.decode('utf-8')
urlopen返回物件提供方法:
- read() , readline() ,readlines() , fileno() , close() :對HTTPResponse型別資料進行操作
- info():返回HTTPMessage物件,表示遠端伺服器返回的頭資訊
- getcode():返回Http狀態碼。如果是http請求,200請求成功完成;404網址未找到
- geturl():返回請求的url
2.使用Request
urllib.request.
Request
(url, data=None, headers={},
method=None)
使用request()來包裝請求,再通過urlopen()獲取頁面。
1 url = r'http://www.lagou.com/zhaopin/Python/?labelWords=label' 2 headers = { 3 'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 4 r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3', 5 'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label', 6 'Connection': 'keep-alive' 7 } 8 req = request.Request(url, headers=headers) 9 page = request.urlopen(req).read() 10 page = page.decode('utf-8')
用來包裝頭部的資料:
- User-Agent :這個頭部可以攜帶如下幾條資訊:瀏覽器名和版本號、作業系統名和版本號、預設語言
- Referer:可以用來防止盜鏈,有一些網站圖片顯示來源http://***.com,就是檢查Referer來鑑定的
- Connection:表示連線狀態,記錄Session的狀態。
3.Post資料
urllib.request.
urlopen
(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
urlopen()的data引數預設為None,當data引數不為空的時候,urlopen()提交方式為Post。
1 from urllib import request, parse 2 url = r'http://www.lagou.com/jobs/positionAjax.json?' 3 headers = { 4 'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 5 r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3', 6 'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label', 7 'Connection': 'keep-alive' 8 } 9 data = { 10 'first': 'true', 11 'pn': 1, 12 'kd': 'Python' 13 } 14 data = parse.urlencode(data).encode('utf-8') 15 req = request.Request(url, headers=headers, data=data) 16 page = request.urlopen(req).read() 17 page = page.decode('utf-8')
urllib.parse.urlencode
(query, doseq=False, safe='', encoding=None, errors=None)
urlencode()主要作用就是將url附上要提交的資料。
1 data = { 2 'first': 'true', 3 'pn': 1, 4 'kd': 'Python' 5 } 6 data = parse.urlencode(data).encode('utf-8')
經過urlencode()轉換後的data資料為?first=true?pn=1?kd=Python,最後提交的url為
http://www.lagou.com/jobs/positionAjax.json?first=true?pn=1?kd=Python
Post的資料必須是bytes或者iterable of bytes,不能是str,因此需要進行encode()編碼
1 page = request.urlopen(req, data=data).read()
當然,也可以把data的資料封裝在urlopen()引數中
4.異常處理
1 def get_page(url): 2 headers = { 3 'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 4 r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3', 5 'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label', 6 'Connection': 'keep-alive' 7 } 8 data = { 9 'first': 'true', 10 'pn': 1, 11 'kd': 'Python' 12 } 13 data = parse.urlencode(data).encode('utf-8') 14 req = request.Request(url, headers=headers) 15 try: 16 page = request.urlopen(req, data=data).read() 17 page = page.decode('utf-8') 18 except error.HTTPError as e: 19 print(e.code()) 20 print(e.read().decode('utf-8')) 21 return page
5、使用代理
urllib.request.
ProxyHandler
(proxies=None)
當需要抓取的網站設定了訪問限制,這時就需要用到代理來抓取資料。
1 data = { 2 'first': 'true', 3 'pn': 1, 4 'kd': 'Python' 5 } 6 proxy = request.ProxyHandler({'http': '5.22.195.215:80'}) # 設定proxy 7 opener = request.build_opener(proxy) # 掛載opener 8 request.install_opener(opener) # 安裝opener 9 data = parse.urlencode(data).encode('utf-8') 10 page = opener.open(url, data).read() 11 page = page.decode('utf-8') 12 return page
相關推薦
[Python]網路爬蟲(二):利用urllib通過指定的URL抓取網頁內容
1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=F
[Python]網路爬蟲(二):利用urllib2通過指定的URL抓取網頁內容
版本號:Python2.7.5,Python3改動較大,各位另尋教程。 所謂網頁抓取,就是把URL地址中指定的網路資源從網路流中讀取出來,儲存到本地。 類似於使用程式模擬IE瀏覽器的功能,把URL作為HTTP請求的內容傳送到伺服器端, 然後讀取伺服器端的響應資源。 在
[Python]網路爬蟲(五):urllib2的使用細節與抓站技巧
前面說到了urllib2的簡單入門,下面整理了一部分urllib2的使用細節。 1.Proxy 的設定 urllib2 預設會使用環境變數 http_proxy 來設定 HTTP Proxy。 如果想在程式中明確控制 Proxy 而不受環境變數的影響,可以使用代理。
[Python]網路爬蟲(一):抓取網頁的含義和URL基本構成
一、網路爬蟲的定義 網路爬蟲,即Web Spider,是一個很形象的名字。 把網際網路比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。 網路蜘蛛是通過網頁的連結地址來尋找網頁的。 從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它連結地址
Python網路爬蟲(三):chromdriver.exe與chrome版本對映及下載連結
前言:最近正在學習Python網路爬蟲,學到selenium,需要用到chrome瀏覽器的驅動,但是網上的很多地址都被牆了,而且沒有準確的驅動和chrome版本的對映,很麻煩。現在我已經解決了這些問題,現在把對映和下載連結分享出來。 (一)檢視chrome
Python網路爬蟲(四):視訊下載器
這一節實現一個下載 iqiyi VIP視訊的爬蟲。 需要的準備:旋風視訊VIP解析網站或其他解析網站 原理理解: 在視訊解析網站獲取視訊的過程中,首先會向視訊伺服器傳送GET請求,獲得伺服器發來的資訊;接到資訊後,再向伺服器POST資料,即將類似於密碼
Python網路爬蟲(九):爬取頂點小說網站全部小說,並存入MongoDB
前言:本篇部落格將爬取頂點小說網站全部小說、涉及到的問題有:Scrapy架構、斷點續傳問題、Mongodb資料庫相關操作。 背景: Python版本:Anaconda3 執行平臺:Windows IDE:PyCharm 資料庫:MongoDB 瀏
Python網路爬蟲(四):selenium+chrome爬取美女圖片
說明: Python版本:Python IDE:PyCharm chrome版本:我的版本63 chromedriver.exe:因為是模擬瀏覽器訪問,chrome需要再下載一個驅動,具體方式在我的上一篇部落格,內容很詳細。傳送門:Python網路爬蟲(
Python網路爬蟲(七):解決ImportError:DLL load failed:作業系統無法執行問題
背景: Python版本:Anaconda3 問題描述: 最近在執行scrapy專案時,本來安裝好好的scrapy框架突然報錯,猝不及防, ImportError:DLL load failed:作業系統無法執行%1 如圖: 自己也是百思
[Python]網路爬蟲(三):使用cookiejar管理cookie 以及 模擬登入知乎
大家好哈,上一節我們研究了一下爬蟲的異常處理問題,那麼接下來我們一起來看一下Cookie的使用。 為什麼要使用Cookie呢? Cookie,指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密) 比如說有些網站需要登入後才
[Python]網路爬蟲(四):Opener與Handler
在開始後面的內容之前,先來解釋一下urllib2中的兩個個方法:info and geturl urlopen返回的應答物件response(或者HTTPError例項)有兩個很有用的方法info()和geturl() 1.geturl(): geturl()返回獲
python網路爬蟲(11)近期電影票房或熱度資訊爬取
目標意義 為了理解動態網站中一些資料如何獲取,做一個簡單的分析。 說明 思路,原始程式碼來源於:https://book.douban.com/subject/27061630/。 構造-下載器 構造分下載器,下載原始網頁,用於原始網頁的獲取,動態網頁中,js部分的響應獲取。 通過瀏覽器模仿,合理
Python和C|C++的混編(二):利用Cython進行混編
cde uil 有時 當前 class def 將在 python 混編 還能夠使用Cython來實現混編 1 下載Cython。用python setup.py install進行安裝 2 一個實例 ① 創建helloworld文件夾創建hellowor
Python爬蟲(二):爬蟲獲取資料儲存到檔案
接上一篇文章:Python爬蟲(一):編寫簡單爬蟲之新手入門 前言: 上一篇文章,我爬取到了豆瓣官網的頁面程式碼,我在想怎樣讓爬取到的頁面顯示出來呀,爬到的資料是html頁面程式碼,不如將爬取到的程式碼儲存到一個檔案中,檔案命名為html格式,那直接開啟這個檔案就可以在瀏覽器上看到爬取資料的
Python爬蟲(二):Scrapy框架的配置安裝
Windows安裝方式 預設支援Python2、Python3,通過pip安裝Csrapy框架: pip install Scrapy Ubuntu(9.10以上版本)安裝方式 預設支援Python2、Python3,通過pip安裝Csrapy框架: sud
python手記(五):requests寫爬蟲(二):bs4處理文字資料
人生無趣且不易,一起找點樂子吧。歡迎評論,和文章無關的也可以。 上篇介紹了requests的基本用法,最後我們獲得了網頁的原始碼,並將其存到了文字中: 但是,我們需要的並不是全部的程式碼,我們需要的是文章的那一部分。其實requ
【網路爬蟲】【java】微博爬蟲(二):如何抓取HTML頁面及HttpClient使用
一、寫在前面 上篇文章以網易微博爬蟲為例,給出了一個很簡單的微博爬蟲的爬取過程,大概說明了網路爬蟲其實也就這麼回事,或許初次看到這個例子覺得有些複雜,不過沒有關係,上篇文章給的例子只是讓大家對爬蟲過程有所瞭解。接下來的系列裡,將一步一步地剖析每個過程。 現
linux網路程式設計之TCP/IP基礎(二):利用ARP和ICMP協議解釋ping命令
一、MTU 乙太網和IEEE 802.3對資料幀的長度都有限制,其最大值分別是1500和1492位元組,將這個限制稱作最大傳輸單元(MTU,Maximum Transmission Unit)。如果I
網路爬蟲(六):Python中的正則表示式教程
接下來準備用糗百做一個爬蟲的小例子。 但是在這之前,先詳細的整理一下Python中的正則表示式的相關內容。 正則表示式在Python爬蟲中的作用就像是老師點名時用的花名冊一樣,是必不可少的神兵利器。 整理時沒有注意,實在抱歉。 一、 正則表示式基礎 1.1.概
Python爬蟲(二):Requests庫
所謂爬蟲就是模擬客戶端傳送網路請求,獲取網路響應,並按照一定的規則解析獲取的資料並儲存的程式。要說 Python 的爬蟲必然繞不過 Requests 庫。 1 簡介 對於 Requests 庫,官方文件是這麼說的: Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用。 警告