小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python3網(wǎng)絡(luò)爬蟲(一):利用urllib進(jìn)行簡(jiǎn)單的網(wǎng)頁(yè)抓取

 stoneccf 2019-01-06

運(yùn)行平臺(tái):Windows
Python版本:Python3.x
IDE:Sublime text3

轉(zhuǎn)載請(qǐng)注明作者和出處:http://blog.csdn.net/c406495762/article/details/58716886

    一直想學(xué)習(xí)Python爬蟲的知識(shí),在網(wǎng)上搜索了一下,大部分都是基于Python2.x的。因此打算寫一個(gè)Python3.x的爬蟲筆記,以便后續(xù)回顧,歡迎一起交流、共同進(jìn)步。

一、預(yù)備知識(shí)

1.Python3.x基礎(chǔ)知識(shí)學(xué)習(xí):

    可以在通過(guò)如下方式進(jìn)行學(xué)習(xí):

    (1)廖雪峰Python3教程(文檔):

    URL:http://www./

    (2)菜鳥教程Python3教程(文檔):

    URL:http://www.runoob.com/python3/python3-tutorial.html

    (3)魚C工作室Python教程(視頻):

    小甲魚老師很厲害,講課風(fēng)格幽默詼諧,如果時(shí)間充??梢钥紤]看視頻。

    URL:http://www./

2.開(kāi)發(fā)環(huán)境搭建:

    Sublime text3搭建Pyhthon IDE可以查看博客:

    URL:http://www.cnblogs.com/nx520zj/p/5787393.html

    URL:http://blog.csdn.net/c406495762/article/details/56489253

二、網(wǎng)絡(luò)爬蟲的定義

    網(wǎng)絡(luò)爬蟲,也叫網(wǎng)絡(luò)蜘蛛(Web Spider),如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),Spider就是一只在網(wǎng)上爬來(lái)爬去的蜘蛛。網(wǎng)絡(luò)爬蟲就是根據(jù)網(wǎng)頁(yè)的地址來(lái)尋找網(wǎng)頁(yè)的,也就是URL。舉一個(gè)簡(jiǎn)單的例子,我們?cè)跒g覽器的地址欄中輸入的字符串就是URL,例如:https://www.baidu.com/

    URL就是同意資源定位符(Uniform Resource Locator),它的一般格式如下(帶方括號(hào)[]的為可選項(xiàng)):

    protocol :// hostname[:port] / path / [;parameters][?query]#fragment

    URL的格式由三部分組成:

    (1)protocol:第一部分就是協(xié)議,例如百度使用的就是https協(xié)議;

    (2)hostname[:port]:第二部分就是主機(jī)名(還有端口號(hào)為可選參數(shù)),一般網(wǎng)站默認(rèn)的端口號(hào)為80,例如百度的主機(jī)名就是www.baidu.com,這個(gè)就是服務(wù)器的地址;

    (3)path:第三部分就是主機(jī)資源的具體地址,如目錄和文件名等。

    網(wǎng)絡(luò)爬蟲就是根據(jù)這個(gè)URL來(lái)獲取網(wǎng)頁(yè)信息的。

三、簡(jiǎn)單爬蟲實(shí)例

    在Python3.x中,我們可以使用urlib這個(gè)組件抓取網(wǎng)頁(yè),urllib是一個(gè)URL處理包,這個(gè)包中集合了一些處理URL的模塊,如下:

picture1

1.urllib.request模塊是用來(lái)打開(kāi)和讀取URLs的;

2.urllib.error模塊包含一些有urllib.request產(chǎn)生的錯(cuò)誤,可以使用try進(jìn)行捕捉處理;

3.urllib.parse模塊包含了一些解析URLs的方法;

4.urllib.robotparser模塊用來(lái)解析robots.txt文本文件.它提供了一個(gè)單獨(dú)的RobotFileParser類,通過(guò)該類提供的can_fetch()方法測(cè)試爬蟲是否可以下載一個(gè)頁(yè)面。

    我們使用urllib.request.urlopen()這個(gè)接口函數(shù)就可以很輕松的打開(kāi)一個(gè)網(wǎng)站,讀取并打印信息。

picture2

    urlopen有一些可選參數(shù),具體信息可以查閱Python自帶的documentation。

    了解到這些,我們就可以寫一個(gè)最簡(jiǎn)單的程序,文件名為urllib_test01.py,感受一個(gè)urllib庫(kù)的魅力:

# -*- coding: UTF-8 -*-
from urllib import request

if __name__ == "__main__":
    response = request.urlopen("http://fanyi.baidu.com")
    html = response.read()
    print(html)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

    urllib使用使用request.urlopen()打開(kāi)和讀取URLs信息,返回的對(duì)象response如同一個(gè)文本對(duì)象,我們可以調(diào)用read(),進(jìn)行讀取。再通過(guò)print(),將讀到的信息打印出來(lái)。

    運(yùn)行程序ctrl+b,可以在Sublime中查看運(yùn)行結(jié)果,如下:

picture3

    也可以在cmd(控制臺(tái))中輸入指令:

python urllib_test01.py
  • 1

    運(yùn)行py文件,輸出信息是一樣的,如下:

picture5

    其實(shí)這就是瀏覽器接收到的信息,只不過(guò)我們?cè)谑褂脼g覽器的時(shí)候,瀏覽器已經(jīng)將這些信息轉(zhuǎn)化成了界面信息供我們?yōu)g覽。當(dāng)然這些代碼我們也可以從瀏覽器中查看到。例如,使用谷歌瀏覽器,在任意界面單擊右鍵選擇檢查,也就是審查元素(不是所有頁(yè)面都可以審查元素的,例如起點(diǎn)中文網(wǎng)付費(fèi)章節(jié)就不行.),以百度界面為例,截圖如下:

picture6

    可以看到,右邊就是我們的審查結(jié)果。我們可以在本地,也就是瀏覽器(客戶端)更改元素,但是這個(gè)不會(huì)上傳到服務(wù)器端。例如我可以修改自己的支付寶余額裝一裝,比如這樣:

picture7

    我實(shí)際有這些錢嗎?顯然苦逼的我,是不會(huì)有這些錢的,我只不過(guò)是修改了下審查元素的信息而已。

    有些跑偏,不過(guò)說(shuō)的道理就是,瀏覽器就是作為客戶端從服務(wù)器端獲取信息,然后將信息解析,再展示給我們的。

    回歸正題,雖然我們已經(jīng)成功獲取了信息,但是顯然他們都是二進(jìn)制的亂碼,看起來(lái)很不方便。我們?cè)趺崔k呢?

    我們可以通過(guò)簡(jiǎn)單的decode()命令將網(wǎng)頁(yè)的信息進(jìn)行解碼,并顯示出來(lái),我們新創(chuàng)建一個(gè)文件,命名為urllib_test02.py,編寫如下代碼(還是以百度翻譯網(wǎng)站fanyi.baidu.com為例):

# -*- coding: UTF-8 -*-
from urllib import request

if __name__ == "__main__":
    response = request.urlopen("http://www.fanyi.baidu.com/")
    html = response.read()
    html = html.decode("utf-8")
    print(html)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

    這樣我們就可以得到這樣的結(jié)果,顯然解碼后的信息看起來(lái)工整和舒服多了:

picture8

    當(dāng)然這個(gè)前提是我們已經(jīng)知道了這個(gè)網(wǎng)頁(yè)是使用utf-8編碼的,怎么查看網(wǎng)頁(yè)的編碼方式呢?需要人為操作,且非常簡(jiǎn)單的方法是使用使用瀏覽器審查元素,只需要找到head標(biāo)簽開(kāi)始位置的chareset,就知道網(wǎng)頁(yè)是采用何種編碼的了。如下:

picture9

    這樣我們就知道了這個(gè)網(wǎng)站的編碼方式,但是這需要我們每次都打開(kāi)瀏覽器,并找下編碼方式,顯然有些費(fèi)事,使用幾行代碼解決更加省事并且顯得酷一些。

四、自動(dòng)獲取網(wǎng)頁(yè)編碼方式的方法

    獲取網(wǎng)頁(yè)編碼的方式有很多,個(gè)人更喜歡用第三方庫(kù)的方式。

    首先我們需要安裝第三方庫(kù)chardet,它是用來(lái)判斷編碼的模塊,安裝方法如下圖所示,只需要輸入指令:

pip install chardet
  • 1

picture10

    安裝好后,我們就可以使用chardet.detect()方法,判斷網(wǎng)頁(yè)的編碼方式了。至此,我們就可以編寫一個(gè)小程序判斷網(wǎng)頁(yè)的編碼方式了,新建文件名為chardet_test01.py:

# -*- coding: UTF-8 -*-
from urllib import request
import chardet

if __name__ == "__main__":
    response = request.urlopen("http://fanyi.baidu.com/")
    html = response.read()
    charset = chardet.detect(html)
    print(charset)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

    運(yùn)行程序,查看輸出結(jié)果如下:

picture11

    瞧,返回的是一個(gè)字典,這樣我們就知道網(wǎng)頁(yè)的編碼方式了,通過(guò)獲得的信息,采用不同的解碼方式即可。

PS:關(guān)于編碼方式的內(nèi)容,可以自行百度,或者看下這篇博客:

URL:http://blog.csdn.net/csywwx2008/article/details/17137097

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多