114培訓(xùn)網(wǎng)歡迎您來到全國python學(xué)習(xí)中心!

13289378727

全國統(tǒng)一學(xué)習(xí)專線 9:00-21:00

使用python3 requests和bs4進行爬蟲(二)爬取文章

為了做到更優(yōu)雅,這次拋棄了urllib庫的引用,使用requests和搭配的方式進行

首先構(gòu)建一個請求并且響應(yīng)它
然后呢到上找一篇文章試試手,看一下網(wǎng)頁源碼找到文章的div
以及找到文章內(nèi)容,仔細看看內(nèi)容還挺不錯哈哈
可以發(fā)現(xiàn)所有的內(nèi)容都在p標簽里面,那么接下來就簡單多了只需要
f5運行一下

*使用codecs庫來進行文件操作將文章保存到本地
沒錯使用上requests和bs4之后爬取文章的工作是那么的輕松呢
效果圖

「2022 年」崔慶才 Python3 爬蟲教程 - 代理的使用方法

前面我們介紹了多種請求庫,如 urllib、requests、Selenium、 等用法,但是沒有統(tǒng)一梳理代理的設(shè)置方法,本節(jié)我們來針對這些庫來梳理下代理的設(shè)置方法。

在本節(jié)開始之前,請先根據(jù)上一節(jié)了解一下代理的基本原理,了解了基本原理之后我們可以更好地理解和學(xué)習(xí)本節(jié)的內(nèi)容。

另外我們需要先獲取一個可用代理,代理就是 IP 地址和端口的組合,就是 : 這樣的格式。如果代理需要訪問認證,那就還需要額外的用戶名密碼兩個信息。

那怎么獲取一個可用代理呢?

使用搜索引擎搜索 “代理” 關(guān)鍵字,可以看到許多代理服務(wù)網(wǎng)站,網(wǎng)站上會有很多免費或付費代理,比如快代理的免費 HTTP 代理: 上面就寫了很多免費代理,但是這些免費代理大多數(shù)情況下并不一定穩(wěn)定,所以比較靠譜的方法是購買付費代理。付費代理的各大代理商家都有套餐,數(shù)量不用多,穩(wěn)定可用即可,我們可以自行選購。

另外除了購買付費 HTTP 代理,我們也可以在本機配置一些代理軟件,具體的配置方法可以參考 HTTP 或 SOCKS 代理服務(wù),所以代理地址一般都是 127.0.0.1: 這樣的格式,不同的軟件用的端口可能不同。

這里我的本機安裝了一部代理軟件,它會在本地 7890 端口上創(chuàng)建 HTTP 代理服務(wù),即代理為 127.0.0.1:7890。另外,該軟件還會在 7891 端口上創(chuàng)建 SOCKS 代理服務(wù),即代理為 127.0.0.1:7891,所以只要設(shè)置了這個代理,就可以成功將本機 IP 切換到代理軟件連接的服務(wù)器的 IP 了。

在本章下面的示例里,我使用上述代理來演示其設(shè)置方法,你也可以自行替換成自己的可用代理。

設(shè)置代理后,測試的網(wǎng)址是 origin 字段就是客戶端的 IP,我們可以根據(jù)它來判斷代理是否設(shè)置成功,即是否成功偽裝了 IP。

好,接下來我們就來看下各個請求庫的代理設(shè)置方法吧。

首先我們以最基礎(chǔ)的 urllib 為例,來看一下代理的設(shè)置方法,代碼如下:

運行結(jié)果如下:

這里我們需要借助 設(shè)置代理,參數(shù)是字典類型,鍵名為協(xié)議類型,鍵值是代理。注意,此處代理前面需要加上協(xié)議,即 http:// 或者 HTTP 協(xié)議的時候,會使用 http 鍵名對應(yīng)的代理,當請求的鏈接是 HTTPS 協(xié)議的時候,會使用 https 鍵名對應(yīng)的代理。不過這里我們把代理本身設(shè)置為了 HTTP 協(xié)議,即前綴統(tǒng)一設(shè)置為了 HTTP 還是 HTTPS 協(xié)議的鏈接,都會使用我們配置的 HTTP 協(xié)議的代理進行請求。

創(chuàng)建完 對象之后,我們需要利用 build_opener 方法傳入該對象來創(chuàng)建一個 Opener,這樣就相當于此 Opener 已經(jīng)設(shè)置好代理了。接下來直接調(diào)用 Opener 對象的 open 方法,即可訪問我們所想要的鏈接。

運行輸出結(jié)果是一個 JSON,它有一個字段 origin,標明了客戶端的 IP。驗證一下,此處的 IP 確實為代理的 IP,并不是真實的 IP。這樣我們就成功設(shè)置好代理,并可以隱藏真實 IP 了。

如果遇到需要認證的代理,我們可以用如下的方法設(shè)置:

這里改變的只是 proxy 變量,只需要在代理前面加入代理認證的用戶名密碼即可,其中 username 就是用戶名,password 為密碼,例如 username 為 foo,密碼為 bar,那么代理就是 foo:bar@127.0.0.1:7890。

如果代理是 SOCKS5 類型,那么可以用如下方式設(shè)置代理:

此處需要一個 socks 模塊,可以通過如下命令安裝:

這里需要本地運行一個 SOCKS5 代理,運行在 7891 端口,運行成功之后和上文 HTTP 代理輸出結(jié)果是一樣的:

結(jié)果的 origin 字段同樣為代理的 IP,代理設(shè)置成功。

對于 requests 來說,代理設(shè)置非常簡單,我們只需要傳入 proxies 參數(shù)即可。

這里以我本機的代理為例,來看下 requests 的 HTTP 代理設(shè)置,代碼如下:

運行結(jié)果如下:

和 urllib 一樣,當請求的鏈接是 HTTP 協(xié)議的時候,會使用 http 鍵名對應(yīng)的代理,當請求的鏈接是 HTTPS 協(xié)議的時候,會使用 https 鍵名對應(yīng)的代理,不過這里統(tǒng)一使用了 HTTP 協(xié)議的代理。

運行結(jié)果中的 origin 若是代理服務(wù)器的 IP,則證明代理已經(jīng)設(shè)置成功。

如果代理需要認證,那么在代理的前面加上用戶名和密碼即可,代理的寫法就變成如下所示:

這里只需要將 username 和 password 替換即可。

如果需要使用 SOCKS 代理,則可以使用如下方式來設(shè)置:

這里我們需要額外安裝一個包 requests[socks],相關(guān)命令如下所示:

運行結(jié)果是完全相同的:

另外,還有一種設(shè)置方式,即使用 socks 模塊,也需要像上文一樣安裝 socks 庫。這種設(shè)置方法如下所示:

使用這種方法也可以設(shè)置 SOCKS 代理,運行結(jié)果完全相同。相比*種方法,此方法是全局設(shè)置的。我們可以在不同情況下選用不同的方法。

httpx 的用法本身就與 requests 的使用非常相似,所以其也是通過 proxies 參數(shù)來設(shè)置代理的,不過與 requests 不同的是,proxies 參數(shù)的鍵名不能再是 http 或 https,而需要更改為 http:// 或 對于 HTTP 代理來說,設(shè)置方法如下:

對于需要認證的代理,也是改下 proxy 的值即可:

這里只需要將 username 和 password 替換即可。

運行結(jié)果和使用 requests 是類似的,結(jié)果如下:

對于 SOCKS 代理,我們需要安裝 httpx-socks 庫,安裝方法如下:

這樣會同時安裝同步和異步兩種模式的支持。

對于同步模式,設(shè)置方法如下:

對于異步模式,設(shè)置方法如下:

和同步模式不同的是,transport 對象我們用的是 而不是 ,同時需要將 Client 對象更改為 對象,其他的不變,運行結(jié)果是一樣的。

Selenium 同樣可以設(shè)置代理,這里以 Chrome 為例來介紹其設(shè)置方法。

對于無認證的代理,設(shè)置方法如下:

運行結(jié)果如下:

代理設(shè)置成功,origin 同樣為代理 IP 的地址。

如果代理是認證代理,則設(shè)置方法相對比較繁瑣,具體如下所示:

這里需要在本地創(chuàng)建一個 manifest.json 配置文件和 .js 腳本來設(shè)置認證代理。運行代碼之后,本地會生成一個 proxy_auth_plugin.zip 文件來保存當前配置。

運行結(jié)果和上例一致,origin 同樣為代理 IP。

SOCKS 代理的設(shè)置也比較簡單,把對應(yīng)的協(xié)議修改為 socks5 即可,如無密碼認證的代理設(shè)置方法為:

運行結(jié)果是一樣的。

對于 aiohttp 來說,我們可以通過 proxy 參數(shù)直接設(shè)置。HTTP 代理設(shè)置如下:

如果代理有用戶名和密碼,像 requests 一樣,把 proxy 修改為如下內(nèi)容:

這里只需要將 username 和 password 替換即可。

對于 SOCKS 代理,我們需要安裝一個支持庫 aiohttp-socks,其安裝命令如下:

我們可以借助于這個庫的 來設(shè)置 SOCKS 代理,其代碼如下:

運行結(jié)果是一樣的。

另外,這個庫還支持設(shè)置 SOCKS4、HTTP 代理以及對應(yīng)的代理認證,可以參考其官方介紹。

對于 Pyppeteer 來說,由于其默認使用的是類似 Chrome 的 Chromium 瀏覽器,因此其設(shè)置方法和 Selenium 的 Chrome 一樣,如 HTTP 無認證代理設(shè)置方法都是通過 args 來設(shè)置的,實現(xiàn)如下:

運行結(jié)果如下:

同樣可以看到設(shè)置成功。

SOCKS 代理也一樣,只需要將協(xié)議修改為 socks5 即可,代碼實現(xiàn)如下:

運行結(jié)果也是一樣的。

相對 Selenium 和 Pyppeteer 來說, 的代理設(shè)置更加方便,其預(yù)留了一個 proxy 參數(shù),可以在啟動 的時候設(shè)置。

對于 HTTP 代理來說,可以這樣設(shè)置:

在調(diào)用 launch 方法的時候,我們可以傳一個 proxy 參數(shù),是一個字典。字典有一個必填的字段叫做 server,這里我們可以直接填寫 HTTP 代理的地址即可。

運行結(jié)果如下:

對于 SOCKS 代理,設(shè)置方法也是完全一樣的,我們只需要把 server 字段的值換成 SOCKS 代理的地址即可:

運行結(jié)果和剛才也是完全一樣的。

對于有用戶名和密碼的代理, 的設(shè)置也非常簡單,我們只需要在 proxy 參數(shù)額外設(shè)置 username 和 password 字段即可,假如用戶名和密碼分別是 foo 和 bar,則設(shè)置方法如下:

這樣我們就能非常方便地為 實現(xiàn)認證代理的設(shè)置。

以上我們就總結(jié)了各個請求庫的代理使用方式,各種庫的設(shè)置方法大同小異,學(xué)會了這些方法之后,以后如果遇到封 IP 的問題,我們可以輕松通過加代理的方式來解決。

本節(jié)代碼: (一).
.
.
[('紋身小妹夏美醬酥胸半露誘惑十足(圖45)', '
[('紋身小妹夏美醬酥胸半露誘惑十足(圖46)', '
[('紋身小妹夏美醬酥胸半露誘惑十足(圖47)', '
[('紋身小妹夏美醬酥胸半露誘惑十足(圖48)', '
[('紋身小妹夏美醬酥胸半露誘惑十足(圖49)', '
[('紋身小妹夏美醬酥胸半露誘惑十足(圖50)', '
[('紋身小妹夏美醬酥胸半露誘惑十足(圖51)', '
[('美護士沈夢瑤制服寫真大膽張腿很誘惑(圖1)', '
[('美護士沈夢瑤制服寫真大膽張腿很誘惑(圖2)', '
[('美護士沈夢瑤制服寫真大膽張腿很誘惑(圖3)', '
[('美護士沈夢瑤制服寫真大膽張腿很誘惑(圖4)', '
.
.
.

Python 3 網(wǎng)絡(luò)爬蟲學(xué)習(xí)建議?

用py3寫爬蟲的話,強力推薦這本書,應(yīng)該是目前最系統(tǒng)最完善介紹python爬蟲的書??梢匀D靈社區(qū)買電子版。書的內(nèi)容很新也很系統(tǒng),從,requests到ajax,圖像識別,單元測試。比起絕大多數(shù)blog零散的教程要好的多,看完書后就可以去做些實戰(zhàn)項目,這個時候可以去github上找類似的項目借鑒下。英文版pdf:個人覺得英文版更好)中文版pdf:這本書內(nèi)容比較淺,我表示贊同。但是對于新手來說,看完這本書,對于爬蟲基礎(chǔ)的應(yīng)用與概念絕對有了初步的了解。其實國內(nèi)有一本講爬蟲的好書,《自己動手寫網(wǎng)絡(luò)爬蟲》,這本書除了介紹爬蟲基本原理,包括優(yōu)先級,寬度優(yōu)先搜索,分布式爬蟲,多線程,還有云計算,數(shù)據(jù)挖掘內(nèi)容。只不過用了java來實現(xiàn),但是思路是相同的。有這幾個包基本上就夠用了。當初學(xué)習(xí)爬蟲的時候一點都不懂,甚至連爬蟲是什么都不知道就在學(xué)了,但是懷著不懂裝懂的精神,到現(xiàn)在基本上也算對爬蟲了解一二。正如你所說,爬蟲是個大坑!因為這不僅僅是Python的事,想要學(xué)好爬蟲,需要學(xué)習(xí):網(wǎng)絡(luò)基礎(chǔ)知識(post/get/抓包)、(推薦)正則表達式(re模塊)、多線程/多進程、數(shù)據(jù)庫(儲存)。還有各種各樣的問題:Python蛋疼的編碼問題、遇到Ajax就要用selenium(效率低)、遇到驗證碼腫么辦(我放棄)、需要模擬登錄(我直接用cookies,在這里推薦requests,用法是:被網(wǎng)站禁ip等等所以,如果你是想學(xué)爬蟲,那么就慢慢磨吧。但是你是想學(xué)習(xí)機器學(xué)習(xí),網(wǎng)上那么多的數(shù)據(jù)集,可以不必專門學(xué)。

我的爬蟲入門書 —— 《Python3網(wǎng)絡(luò)爬蟲開發(fā)實戰(zhàn)(第二版)》

年前學(xué)習(xí)python基礎(chǔ)知識之后,在好奇心的推動下,我開始接觸了python網(wǎng)絡(luò)爬蟲,而在剛開始接觸網(wǎng)絡(luò)爬蟲時,繁多的資料讓我猝不及防,對于習(xí)慣于優(yōu)先通過書籍進行自主學(xué)習(xí)的我來說,通過長期看視頻學(xué)習(xí)反而不是很習(xí)慣,但是在網(wǎng)絡(luò)上找到的許多爬蟲相關(guān)資料,不是說的過于簡略,就是部分內(nèi)容有些“過時”。該跟誰走?該怎么走?這個問題那段時間一直困擾著我。

所幸,在熱心群友的推薦下(haha,真的很熱心的一個老哥),我入手了崔大寫的《Python3網(wǎng)絡(luò)爬蟲開發(fā)實戰(zhàn)(第二版)》,找到了符合我狀況的“引路書”。

初入手,書籍就令我驚訝,920頁左右的厚度,在我之前買過的相關(guān)書籍中,厚度也能算是前幾名,比實際想象的厚許多。

而當我翻開目錄,可以發(fā)現(xiàn),與*領(lǐng)域的“大部頭”專著相比(讀過幾本,看那種書真的蠻痛苦的hh),這本書的結(jié)構(gòu)層次分明,由淺入深、層層遞進,由爬蟲基礎(chǔ)引入,再向各方面延伸,剛好滿足了我“半個小白”狀態(tài)的學(xué)習(xí)需要(經(jīng)過近2個月的學(xué)習(xí)感覺也確實真的適合我)。

而在書的內(nèi)容之外,不得不提的是,崔大的Scrape平臺。崔大的Scrape平臺合理的解決了爬蟲入門者實戰(zhàn)訓(xùn)練的“場地”問題,防止了初步入門者無知的邁入了著作權(quán)的“灰色地帶”,這種提供練習(xí)平臺的爬蟲教學(xué),確實也我*次遇到的,我對崔大的用心感到真心佩服。

?? 簡要的介紹到這里就結(jié)束了!目前我已經(jīng)跟隨崔大的這本書學(xué)習(xí)了兩個月,受益匪淺,掌握了蠻多的技能。

總之,如果想跟隨較新的爬蟲教程學(xué)習(xí),基礎(chǔ)跟我相似的同學(xué),我認為崔大的《Python3網(wǎng)絡(luò)爬蟲開發(fā)實戰(zhàn)(第二版)》是入門爬蟲絕不容錯過的一本書!

4種Python爬蟲(3. 微信小程序,如,超級猩猩)

目錄:
1. PC網(wǎng)頁爬蟲
2. H5網(wǎng)頁爬蟲
3. 微信小程序爬蟲
4. 手機APP爬蟲

爬取超級猩猩的課表,該平臺僅提供了微信小程序這一個途徑,前面兩種針對html網(wǎng)頁的爬取方式都不再適用。

采用抓包分析是我們制定方案的*步。

我用的Mac電腦,fiddler只有一個簡化版,所以另找了Charles這個類似的軟件。啟動Charles的代理,在手機WIFI中設(shè)置好對應(yīng)的代理就可以開抓了。但是,抓到的https包的內(nèi)容都是亂碼,咋辦?

Charles中提供了ssl證書,在手機端安裝證書即可。推薦使用iPhone,直接安裝描述文件即可。Android手機必須使用系統(tǒng)版本在7.0以下的才行,7.0以上還需要反編譯什么的,太麻煩了。

很容易的定位到了超級猩猩微信小程序載入課表的后臺接口。拿這個URL在瀏覽器里訪問試試,直接返回了json結(jié)果!超級猩猩很友好!

提取對應(yīng)的URL,放到瀏覽器中驗證,也可以支持返回json包,剩下就是分析一下這個json的數(shù)據(jù)結(jié)構(gòu),按照需要的方式導(dǎo)出了。

直接通過接口的爬取效率非常高,幾秒鐘就拉取了*各個門店的排課,相當舒心。(下圖的錄屏沒有進行加速)

*一個挑戰(zhàn)就是對只有Android/iOS的APP端應(yīng)用數(shù)據(jù)的爬取。請看下一章

請點擊: <下一頁>

python3 怎樣爬取動態(tài)加載的網(wǎng)頁信息

方法1
尋找頁面中的xhr請求, 并得到實際的請求參數(shù). 直接獲取相關(guān)搜索的請求返回代碼, 然后進行數(shù)據(jù)整理.
方法2
模擬瀏覽器操作, 比如使用Selenium 模塊.

溫馨提示:為不影響您的學(xué)業(yè),來校區(qū)前請先電話咨詢,方便我校安排相關(guān)的專業(yè)老師為您解答
相關(guān)資料
姓名不能為空
手機號格式錯誤