最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文教會(huì)你用Python3獲取網(wǎng)頁(yè)源代碼

 更新時(shí)間:2023年06月02日 15:05:00   作者:猿小猴子  
學(xué)了python后,之前一些我們常用的方法,也可以換一種思路用python中的知識(shí)來(lái)解決,下面這篇文章主要給大家介紹了關(guān)于如何使用Python3獲取網(wǎng)頁(yè)源代碼的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

爬蟲(chóng)的數(shù)據(jù)爬取量非常大,顯然不可能對(duì)每個(gè)頁(yè)面都手動(dòng)復(fù)制源代碼,因此就有必要使用自動(dòng)化的方式來(lái)獲取網(wǎng)頁(yè)源代碼。requests是Python的一個(gè)第三方HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議)庫(kù),它比Python自帶的網(wǎng)絡(luò)庫(kù)urllib更加簡(jiǎn)單、方便和人性化。使用requests可以讓Python實(shí)現(xiàn)訪(fǎng)問(wèn)網(wǎng)頁(yè)并獲取源代碼的功能。使用requests獲取網(wǎng)頁(yè)的源代碼,最簡(jiǎn)單的情況下只需要兩行代碼:

      #使用requests獲取源代碼
      import requests
      source = requests.get('https://www.baidu.com').content.deocde()

一、Python的第三方庫(kù)

在Python開(kāi)發(fā)的過(guò)程中,常常需要將一些功能比較通用的代碼抽離出來(lái)作為一個(gè)單獨(dú)的模塊,從而被多個(gè)工程調(diào)用。這種公共的模塊稱(chēng)為Python的庫(kù)(Library,Lib)。Python在發(fā)布時(shí)會(huì)自帶一些由官方開(kāi)發(fā)的常用的庫(kù),例如正則表達(dá)式“re”、時(shí)間“time”等。這些庫(kù)稱(chēng)為“官方庫(kù)”。而由非官方發(fā)布的庫(kù),則稱(chēng)為“第三方庫(kù)”。Python之所以如此強(qiáng)大,正是由于它擁有非常多的第三方庫(kù)。使用第三方庫(kù),可以輕易實(shí)現(xiàn)各種各樣的功能。以獲取網(wǎng)頁(yè)內(nèi)容為例,Python其實(shí)自帶了兩個(gè)模塊,分別是urllib和urllib2。使用這兩個(gè)模塊也可以獲取網(wǎng)頁(yè)內(nèi)容。但是這兩個(gè)模塊使用起來(lái)非常麻煩。而requests這個(gè)第三方庫(kù),讓獲取網(wǎng)頁(yè)內(nèi)容變得極其簡(jiǎn)單。requests這個(gè)庫(kù)的作者給這個(gè)庫(kù)取了一個(gè)副標(biāo)題“HTTP for humans”,直接翻譯過(guò)來(lái)就是“這才是給人用的HTTP庫(kù)”。

Python的第三方庫(kù)需要手動(dòng)安裝。如果系統(tǒng)只有一個(gè)Python版本,那么手動(dòng)安裝第三方庫(kù)時(shí)需要在Mac OS/Linux的終端或者Windows的CMD中執(zhí)行以下命令:

pip install第三方庫(kù)的名字

需要注意的是,如果系統(tǒng)同時(shí)有Python 2和Python 3,并且Python 3是后安裝的,那么要為Python 3安裝第三方庫(kù),就需要使用如下命令:

pip3 install第三方庫(kù)的名字

安裝完第三方庫(kù)以后,就可以在Python中使用了。使用第三方庫(kù),就像使用Python自帶的庫(kù)一樣,首先需要使用“import”關(guān)鍵字將它導(dǎo)入,然后才能使用。還有一點(diǎn)需要特別強(qiáng)調(diào),開(kāi)發(fā)者自己寫(xiě)的.py文件的名字絕對(duì)不能和Python自帶的模塊或者已經(jīng)安裝的第三方庫(kù)的名字相同,否則會(huì)產(chǎn)生問(wèn)題。例如,內(nèi)容涉及requests和正則表達(dá)式,那么開(kāi)發(fā)在測(cè)試代碼的時(shí)候絕對(duì)不能自行創(chuàng)建名為“requests.py”或者“re.py”的文件官方的或第三方庫(kù)名字一樣。一旦創(chuàng)建,代碼必定報(bào)錯(cuò)。

二、requests介紹與安裝

使用pip安裝requests,代碼如下:

pip install requests

pip在線(xiàn)安裝時(shí)可能會(huì)受到防火墻的干擾,因此也可以使用源代碼安裝。打開(kāi)網(wǎng)頁(yè)https://github.com/kennethreitz/requests,單擊“Clone or download”按鈕,再單擊“Download ZIP”按鈕下載源代碼,如圖所示。

解壓源代碼,找到setup.py,并打開(kāi)CMD窗口或者終端,在放置這個(gè)setup.py文件的文件夾中執(zhí)行以下代碼:

python3 setup.py install

安裝完成以后打開(kāi)CMD或者終端,進(jìn)入Python交互環(huán)境,輸入以下代碼

>>>import requests

如果不報(bào)錯(cuò),則表示requests已經(jīng)成功安裝,如圖所示:

三、使用requests獲取網(wǎng)頁(yè)源代碼

使用瀏覽器來(lái)訪(fǎng)問(wèn)網(wǎng)頁(yè),看起來(lái)只需要輸入網(wǎng)址就可以。但其實(shí)網(wǎng)頁(yè)有很多種打開(kāi)方式,最常見(jiàn)的是GET方式和POST方式。在瀏覽器里面可以直接通過(guò)輸入網(wǎng)址訪(fǎng)問(wèn)的頁(yè)面,就是使用了GET方式。還有一些頁(yè)面,只能通過(guò)從另一個(gè)頁(yè)面單擊某個(gè)鏈接或者某個(gè)按鈕以后跳過(guò)來(lái),不能直接通過(guò)在瀏覽器輸入網(wǎng)址訪(fǎng)問(wèn),這種網(wǎng)頁(yè)就是使用了POST方式。

1.GET方式

對(duì)于使用GET方式的網(wǎng)頁(yè),在Python里面可以使用requests的get()方法獲取網(wǎng)頁(yè)的源代碼:

import requests
html = requests.get('網(wǎng)址')
html_bytes = html.content
html_str = html_bytes.decode()

在這4行代碼中,第1行導(dǎo)入了requests庫(kù),這樣代碼里面才能使用。第2行使用GET方法獲取了網(wǎng)頁(yè),得到一個(gè)Response對(duì)象。此時(shí)如果直接打印HTML變量,得到的是:

<Response [200]>

第3行使用.content這個(gè)屬性來(lái)顯示bytes型網(wǎng)頁(yè)的源代碼。第4行代碼將bytes型的網(wǎng)頁(yè)源代碼解碼為字符串型的源代碼。對(duì)于上面的4行代碼,可以將后3行合并,縮減為兩行代碼:

import requests
html_str = requests.get('網(wǎng)址').content.decode()

之所以需要把bytes型的數(shù)據(jù)解碼為字符串型的數(shù)據(jù),是因?yàn)樵赽ytes型的數(shù)據(jù)類(lèi)型下,中文是無(wú)法正常顯示的。這個(gè)“解碼”對(duì)應(yīng)的英文為“decode”,因而我們需要使用.decode()這個(gè)方法。

html = requests.get('網(wǎng)址').content.decode('GBK')
html = requests.get('網(wǎng)址').content.decode('GB2312')
html = requests.get('網(wǎng)址').content.decode('GB18030')

編碼格式有幾十種,但最常見(jiàn)的是“UTF-8”“GBK”“GB2312”和“GB18030”。具體使用哪一種編碼格式,需要根據(jù)實(shí)際情況來(lái)選擇。大多數(shù)情況下使用“UTF-8”,但也有一些網(wǎng)站會(huì)使用“GBK”或者“GB2312”??梢悦恳环N編碼格式都測(cè)試一下,通過(guò)打印出網(wǎng)頁(yè)的源代碼,查看里面的中文是否顯示正常,以中文可以正常顯示為準(zhǔn)。

2.POST方式網(wǎng)頁(yè)的訪(fǎng)問(wèn)方式

除了GET方式以外,還有POST方式。有一些網(wǎng)頁(yè),使用GET和POST方式訪(fǎng)問(wèn)同樣的網(wǎng)址,得到的結(jié)果是不一樣的。還有另外一些網(wǎng)頁(yè),只能使用POST方式訪(fǎng)問(wèn),如果使用GET方式訪(fǎng)問(wèn),網(wǎng)站會(huì)直接返回錯(cuò)誤信息。

此時(shí)就需要使用requests的post()方法來(lái)獲取源代碼。post()方法的格式如下:

import requests
data = {'key1': 'value1','key2': 'value2'}
html_formdata = requests.post('網(wǎng)址', data=data).content.decode()
#用formdata提交數(shù)據(jù)

其中,data這個(gè)字典的內(nèi)容和項(xiàng)數(shù)需要根據(jù)實(shí)際情況修改,Key和Value在不同的網(wǎng)站是不一樣的。而做爬蟲(chóng),構(gòu)造這個(gè)字典是任務(wù)之一。還有一些網(wǎng)址,提交的內(nèi)容需要是JSON格式的,因此post()方法的參數(shù)需要進(jìn)行一些修改:

html_json = requests.post('網(wǎng)址', json=data).content.decode() 
#使用JSON提交數(shù)據(jù)

這樣寫(xiě)代碼,requests可以自動(dòng)將字典轉(zhuǎn)換為JSON字符串。

四、結(jié)合requests與正則表達(dá)式

以GET方式為例,通過(guò)requests獲得了網(wǎng)頁(yè)的源代碼,就可以對(duì)源代碼字符串使用正則表達(dá)式來(lái)提取文本信息。

現(xiàn)在需要把標(biāo)題和兩段中文提取下來(lái),可以通過(guò)正則表達(dá)式來(lái)實(shí)現(xiàn)。

1、 提取標(biāo)題。

title = re.search(‘title>(.*? )<', html, re.S).group(1)

2、提取正文,并將兩段正文使用換行符拼接起來(lái)。

content_list = re.findall(‘p>(.*? )<', html, re.S)
content_str = ‘\n'.join(content_list)

總結(jié)

到此這篇關(guān)于用Python3獲取網(wǎng)頁(yè)源代碼的文章就介紹到這了,更多相關(guān)Python3獲取網(wǎng)頁(yè)源代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python函數(shù)閉包概念

    python函數(shù)閉包概念

    函數(shù)是實(shí)現(xiàn)特定功能的代碼段的封裝,在需要時(shí)可以多次調(diào)用函數(shù)來(lái)實(shí)現(xiàn)該功能,這篇文章主要介紹了python函數(shù)閉包概念,需要的朋友可以參考下
    2025-04-04
  • Python實(shí)現(xiàn)不寫(xiě)硬盤(pán)上傳文件

    Python實(shí)現(xiàn)不寫(xiě)硬盤(pán)上傳文件

    這篇文章主要為大家介紹了Python實(shí)現(xiàn)不寫(xiě)硬盤(pán)上傳文件的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Python+Tkinter制作專(zhuān)屬圖形化界面

    Python+Tkinter制作專(zhuān)屬圖形化界面

    這篇文章主要是帶著大家通過(guò)Python Tkinter制作一個(gè)屬于自己的GUI圖形化界面,可以用于設(shè)計(jì)簽名的哦,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2022-04-04
  • Python中關(guān)鍵字Class的定義和使用方法

    Python中關(guān)鍵字Class的定義和使用方法

    在Python中class是用來(lái)定義類(lèi)的關(guān)鍵字,通過(guò)class關(guān)鍵字可以創(chuàng)建一個(gè)新的類(lèi),該類(lèi)可以包含屬性和方法,這篇文章主要介紹了Python中關(guān)鍵字Class的定義和使用的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • Python調(diào)用requests庫(kù)實(shí)現(xiàn)自動(dòng)化發(fā)牌功能

    Python調(diào)用requests庫(kù)實(shí)現(xiàn)自動(dòng)化發(fā)牌功能

    在游戲開(kāi)發(fā)或自動(dòng)化測(cè)試中,快速生成隨機(jī)撲克牌是一個(gè)常見(jiàn)需求,本文將使用Python中的requests庫(kù)實(shí)現(xiàn)自動(dòng)化發(fā)牌功能,有需要的小伙伴可以參考一下
    2025-07-07
  • 關(guān)于python的編碼與解碼decode()方法及zip()函數(shù)

    關(guān)于python的編碼與解碼decode()方法及zip()函數(shù)

    這篇文章主要介紹了關(guān)于python的編碼與解碼decode()方法及zip()函數(shù),encode0?方法是字符串對(duì)象內(nèi)置的一個(gè)實(shí)現(xiàn)方法用于實(shí)現(xiàn)編碼操作,需要的朋友可以參考下
    2023-04-04
  • Python實(shí)現(xiàn)自動(dòng)裝機(jī)功能案例分析

    Python實(shí)現(xiàn)自動(dòng)裝機(jī)功能案例分析

    這篇文章主要介紹了Python實(shí)現(xiàn)自動(dòng)裝機(jī)功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python 實(shí)現(xiàn)自動(dòng)完成A4標(biāo)簽排版打印功能

    Python 實(shí)現(xiàn)自動(dòng)完成A4標(biāo)簽排版打印功能

    這篇文章主要介紹了Python 實(shí)現(xiàn)自動(dòng)完成A4標(biāo)簽排版打印功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python3中對(duì)json格式數(shù)據(jù)的分析處理

    Python3中對(duì)json格式數(shù)據(jù)的分析處理

    這篇文章主要介紹了Python3中對(duì)json格式數(shù)據(jù)的分析處理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 如何通過(guò)神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線(xiàn)性回歸的擬合

    如何通過(guò)神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線(xiàn)性回歸的擬合

    這篇文章主要介紹了如何通過(guò)神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線(xiàn)性回歸的擬合問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評(píng)論

阳泉市| 灵石县| 措美县| 巴林右旗| 左贡县| 收藏| 甘孜县| 天门市| 长葛市| 嘉义县| 黎平县| 新竹县| 常州市| 博白县| 攀枝花市| 方城县| 日喀则市| 上虞市| 巫溪县| 荣昌县| 辉南县| 孟州市| 当阳市| 玉树县| 柞水县| 蓬安县| 衡阳县| 江门市| 高邮市| 盘山县| 桦甸市| 清徐县| 堆龙德庆县| 南安市| 诸暨市| 巧家县| 夏邑县| 行唐县| 化州市| 岐山县| 四平市|