欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文教會你用Python3獲取網頁源代碼

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

前言

爬蟲的數據爬取量非常大,顯然不可能對每個頁面都手動復制源代碼,因此就有必要使用自動化的方式來獲取網頁源代碼。requests是Python的一個第三方HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議)庫,它比Python自帶的網絡庫urllib更加簡單、方便和人性化。使用requests可以讓Python實現訪問網頁并獲取源代碼的功能。使用requests獲取網頁的源代碼,最簡單的情況下只需要兩行代碼:

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

一、Python的第三方庫

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

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

pip install第三方庫的名字

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

pip3 install第三方庫的名字

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

二、requests介紹與安裝

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

pip install requests

pip在線安裝時可能會受到防火墻的干擾,因此也可以使用源代碼安裝。打開網頁https://github.com/kennethreitz/requests,單擊“Clone or download”按鈕,再單擊“Download ZIP”按鈕下載源代碼,如圖所示。

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

python3 setup.py install

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

>>>import requests

如果不報錯,則表示requests已經成功安裝,如圖所示:

三、使用requests獲取網頁源代碼

使用瀏覽器來訪問網頁,看起來只需要輸入網址就可以。但其實網頁有很多種打開方式,最常見的是GET方式和POST方式。在瀏覽器里面可以直接通過輸入網址訪問的頁面,就是使用了GET方式。還有一些頁面,只能通過從另一個頁面單擊某個鏈接或者某個按鈕以后跳過來,不能直接通過在瀏覽器輸入網址訪問,這種網頁就是使用了POST方式。

1.GET方式

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

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

在這4行代碼中,第1行導入了requests庫,這樣代碼里面才能使用。第2行使用GET方法獲取了網頁,得到一個Response對象。此時如果直接打印HTML變量,得到的是:

<Response [200]>

第3行使用.content這個屬性來顯示bytes型網頁的源代碼。第4行代碼將bytes型的網頁源代碼解碼為字符串型的源代碼。對于上面的4行代碼,可以將后3行合并,縮減為兩行代碼:

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

之所以需要把bytes型的數據解碼為字符串型的數據,是因為在bytes型的數據類型下,中文是無法正常顯示的。這個“解碼”對應的英文為“decode”,因而我們需要使用.decode()這個方法。

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

編碼格式有幾十種,但最常見的是“UTF-8”“GBK”“GB2312”和“GB18030”。具體使用哪一種編碼格式,需要根據實際情況來選擇。大多數情況下使用“UTF-8”,但也有一些網站會使用“GBK”或者“GB2312”??梢悦恳环N編碼格式都測試一下,通過打印出網頁的源代碼,查看里面的中文是否顯示正常,以中文可以正常顯示為準。

2.POST方式網頁的訪問方式

除了GET方式以外,還有POST方式。有一些網頁,使用GET和POST方式訪問同樣的網址,得到的結果是不一樣的。還有另外一些網頁,只能使用POST方式訪問,如果使用GET方式訪問,網站會直接返回錯誤信息。

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

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

其中,data這個字典的內容和項數需要根據實際情況修改,Key和Value在不同的網站是不一樣的。而做爬蟲,構造這個字典是任務之一。還有一些網址,提交的內容需要是JSON格式的,因此post()方法的參數需要進行一些修改:

html_json = requests.post('網址', json=data).content.decode() 
#使用JSON提交數據

這樣寫代碼,requests可以自動將字典轉換為JSON字符串。

四、結合requests與正則表達式

以GET方式為例,通過requests獲得了網頁的源代碼,就可以對源代碼字符串使用正則表達式來提取文本信息。

現在需要把標題和兩段中文提取下來,可以通過正則表達式來實現。

1、 提取標題。

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

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

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

總結

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

相關文章

  • maven沖突問題解決

    maven沖突問題解決

    這篇文章主要介紹了maven沖突問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 三步實現Django Paginator分頁的方法

    三步實現Django Paginator分頁的方法

    這篇文章主要介紹了三步實現Django Paginator分頁的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • python 基于opencv實現高斯平滑

    python 基于opencv實現高斯平滑

    這篇文章主要介紹了python 基于opencv實現高斯平滑,幫助大家更好的理解和使用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • Python使用sql語句對mysql數據庫多條件模糊查詢的思路詳解

    Python使用sql語句對mysql數據庫多條件模糊查詢的思路詳解

    這篇文章主要介紹了Python使用sql語句對mysql數據庫多條件模糊查詢的思路詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Python調整PDF文檔頁邊距的方法小結

    Python調整PDF文檔頁邊距的方法小結

    PDF 文檔中的邊距是指環(huán)繞每頁內容的空白區(qū)域,充當文本或圖像與頁面邊緣之間的緩沖區(qū),本文將介紹如何使用 Spire.PDF for Python 修改 PDF 文檔的頁邊距,為不同使用場景定制合適的文檔布局,需要的朋友可以參考下
    2024-05-05
  • Python命令啟動Web服務器實例詳解

    Python命令啟動Web服務器實例詳解

    這篇文章主要介紹了Python命令啟動Web服務器實例詳解的相關資料,需要的朋友可以參考下
    2017-02-02
  • 深入理解numpy中argmax的具體使用

    深入理解numpy中argmax的具體使用

    本文主要介紹了深入理解numpy中argmax的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用Python實現獲取網頁指定內容

    使用Python實現獲取網頁指定內容

    在當今互聯網時代,網頁數據抓取是一項非常重要的技能,本文將帶你從零開始學習如何使用Python獲取網頁中的指定內容,希望對大家有所幫助
    2025-03-03
  • python中的函數遞歸和迭代原理解析

    python中的函數遞歸和迭代原理解析

    這篇文章主要介紹了python中的函數遞歸和迭代原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • python將YUV420P文件轉PNG圖片格式的兩種方法

    python將YUV420P文件轉PNG圖片格式的兩種方法

    這篇文章主要介紹了python將YUV420P文件轉PNG圖片格式的兩種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01

最新評論