日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3 爬虫实例_【实战练习】Python3网络爬虫快速入门实战解析(上)

發布時間:2025/3/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 爬虫实例_【实战练习】Python3网络爬虫快速入门实战解析(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:【實戰練習】Python3網絡爬蟲快速入門實戰解析(上)

摘要

使用python3學習網絡爬蟲,快速入門靜態網站爬取和動態網站爬取

[

前言

]

強烈建議:請在電腦的陪同下,閱讀本文。本文以實戰為主,閱讀過程如稍有不適,還望多加練習。

本文的實戰內容有:

網絡小說下載(靜態網站)

優美壁紙下載(動態網站)

愛奇藝VIP視頻下載

[

網絡爬蟲簡介

]

網絡爬蟲,也叫網絡蜘蛛(Web Spider)。它根據網頁地址(URL)爬取網頁內容,而網頁地址(URL)就是我們在瀏覽器中輸入的網站鏈接。比如:https://www.baidu.com/,它就是一個URL。

在講解爬蟲內容之前,我們需要先學習一項寫爬蟲的必備技能:審查元素(如果已掌握,可跳過此部分內容)。

1、審查元素

在瀏覽器的地址欄輸入URL地址,在網頁處右鍵單擊,找到檢查。(不同瀏覽器的叫法不同,Chrome瀏覽器叫做檢查,Firefox瀏覽器叫做查看元素,但是功能都是相同的)

我們可以看到,右側出現了一大推代碼,這些代碼就叫做HTML。什么是HTML?舉個容易理解的例子:我們的基因決定了我們的原始容貌,服務器返回的HTML決定了網站的原始容貌。

為啥說是原始容貌呢?因為人可以整容啊!扎心了,有木有?那網站也可以"整容"嗎?可以!請看下圖:

我能有這么多錢嗎?顯然不可能。我是怎么給網站"整容"的呢?就是通過修改服務器返回的HTML信息。我們每個人都是"整容大師",可以修改頁面信息。我們在頁面的哪個位置點擊審查元素,瀏覽器就會為我們定位到相應的HTML位置,進而就可以在本地更改HTML信息。

再舉個小例子:我們都知道,使用瀏覽器"記住密碼"的功能,密碼會變成一堆小黑點,是不可見的??梢宰屆艽a顯示出來嗎?可以,只需給頁面"動個小手術"!以淘寶為例,在輸入密碼框處右鍵,點擊檢查。

可以看到,瀏覽器為我們自動定位到了相應的HTML位置。將下圖中的password屬性值改為text屬性值(直接在右側代碼處修改):

我們讓瀏覽器記住的密碼就這樣顯現出來了:

說這么多,什么意思呢?瀏覽器就是作為客戶端從服務器端獲取信息,然后將信息解析,并展示給我們的。我們可以在本地修改HTML信息,為網頁"整容",但是我們修改的信息不會回傳到服務器,服務器存儲的HTML信息不會改變。刷新一下界面,頁面還會回到原本的樣子。這就跟人整容一樣,我們能改變一些表面的東西,但是不能改變我們的基因。

2、簡單實例

網絡爬蟲的第一步就是根據URL,獲取網頁的HTML信息。在Python3中,可以使用urllib.request和requests進行網頁爬取。

1.urllib庫是python內置的,無需我們額外安裝,只要安裝了Python就可以使用這個庫。

2.requests庫是第三方庫,需要我們自己安裝。

requests庫強大好用,所以本文使用requests庫獲取網頁的HTML信息。requests庫的github地址:https://github.com/requests/requests

(1)requests安裝

在cmd中,使用如下指令安裝requests:

或者:

(2)簡單實例

requests庫的基礎方法如下:

官方中文教程地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.htmlrequests庫的開發者為我們提供了詳細的中文教程,查詢起來很方便。本文不會對其所有內容進行講解,摘取其部分使用到的內容,進行實戰說明。

首先,讓我們看下requests.get()方法,它用于向服務器發起GET請求,不了解GET請求沒有關系。我們可以這樣理解:get的中文意思是得到、抓住,那這個requests.get()方法就是從服務器得到、抓住數據,也就是獲取數據。讓我們看一個例子(以 www.gitbook.cn為例)來加深理解:

requests.get()方法必須設置的一個參數就是url,因為我們得告訴GET請求,我們的目標是誰,我們要獲取誰的信息。運行程序看下結果:

左側是我們程序獲得的結果,右側是我們在www.gitbook.cn網站審查元素獲得的信息。我們可以看到,我們已經順利獲得了該網頁的HTML信息。這就是一個最簡單的爬蟲實例,可能你會問,我只是爬取了這個網頁的HTML信息,有什么用呢?客官稍安勿躁,接下來進入我們的實戰正文。

[

爬蟲實戰

]

1、小說下載

(1)實戰背景

小說網站-筆趣看:

URL:http://www.biqukan.com/

筆趣看是一個盜版小說網站,這里有很多起點中文網的小說,該網站小說的更新速度稍滯后于起點中文網正版小說的更新速度。并且該網站只支持在線瀏覽,不支持小說打包下載。因此,本次實戰就是從該網站爬取并保存一本名為《一念永恒》的小說,該小說是耳根正在連載中的一部玄幻小說。PS:本實例僅為交流學習,支持耳根大大,請上起點中文網訂閱。

(2)小試牛刀

我們先看下《一念永恒》小說的第一章內容,URL:http://www.biqukan.com/1_1094/5403177.html

我們先用已經學到的知識獲取HTML信息試一試,編寫代碼如下:

運行代碼,可以看到如下結果:

可以看到,我們很輕松地獲取了HTML信息。但是,很顯然,很多信息是我們不想看到的,我們只想獲得如右側所示的正文內容,我們不關心div、br這些html標簽。如何把正文內容從這些眾多的html標簽中提取出來呢?這就是本次實戰的主要內容。

(3)Beautiful Soup

爬蟲的第一步,獲取整個網頁的HTML信息,我們已經完成。接下來就是爬蟲的第二步,解析HTML信息,提取我們感興趣的內容。對于本小節的實戰,我們感興趣的內容就是文章的正文。提取的方法有很多,例如使用正則表達式、Xpath、Beautiful Soup等。對于初學者而言,最容易理解,并且使用簡單的方法就是使用Beautiful Soup提取感興趣內容。

Beautiful Soup的安裝方法和requests一樣,使用如下指令安裝(也是二選一):

1.pip install beautifulsoup4

2.easy_install beautifulsoup4

一個強大的第三方庫,都會有一個詳細的官方文檔。我們很幸運,Beautiful Soup也是有中文的官方文檔。URL:

http://beautifulsoup.readthedocs.io/zh_CN/latest/

同理,我會根據實戰需求,講解Beautiful Soup庫的部分使用方法,更詳細的內容,請查看官方文檔。

現在,我們使用已經掌握的審查元素方法,查看一下我們的目標頁面,你會看到如下內容:

不難發現,文章的所有內容都放在了一個名為div的“東西下面”,這個"東西"就是html標簽。HTML標簽是HTML語言中最基本的單位,HTML標簽是HTML最重要的組成部分。不理解,沒關系,我們再舉個簡單的例子:

一個女人的包包里,會有很多東西,她們會根據自己的習慣將自己的東西進行分類放好。鏡子和口紅這些會經常用到的東西,會歸放到容易拿到的外側口袋里。那些不經常用到,需要注意安全存放的證件會放到不容易拿到的里側口袋里。

html標簽就像一個個“口袋”,每個“口袋”都有自己的特定功能,負責存放不同的內容。顯然,上述例子中的div標簽下存放了我們關心的正文內容。這個div標簽是這樣的:

細心的朋友可能已經發現,除了div字樣外,還有id和class。id和class就是div標簽的屬性,content和showtxt是屬性值,一個屬性對應一個屬性值。這東西有什么用?它是用來區分不同的div標簽的,因為div標簽可以有很多,我們怎么加以區分不同的div標簽呢?就是通過不同的屬性值。

仔細觀察目標網站一番,我們會發現這樣一個事實:class屬性為showtxt的div標簽,獨一份!這個標簽里面存放的內容,是我們關心的正文部分。

知道這個信息,我們就可以使用Beautiful Soup提取我們想要的內容了,編寫代碼如下:

在解析html之前,我們需要創建一個Beautiful Soup對象。BeautifulSoup函數里的參數就是我們已經獲得的html信息。然后我們使用find_all方法,獲得html信息中所有class屬性為showtxt的div標簽。find_all方法的第一個參數是獲取的標簽名,第二個參數class_是標簽的屬性,為什么不是class,而帶了一個下劃線呢?因為python中class是關鍵字,為了防止沖突,這里使用class_表示標簽的class屬性,class_后面跟著的showtxt就是屬性值了??聪挛覀円ヅ涞臉撕灨袷?#xff1a;

這樣對應的看一下,是不是就懂了?可能有人會問了,為什么不是find_all('div', id = 'content', class_ = 'showtxt')?這樣其實也是可以的,屬性是作為查詢時候的約束條件,添加一個class_='showtxt'條件,我們就已經能夠準確匹配到我們想要的標簽了,所以我們就不必再添加id這個屬性了。運行代碼查看我們匹配的結果:

我們可以看到,我們已經順利匹配到我們關心的正文內容,但是還有一些我們不想要的東西。比如div標簽名,br標簽,以及各種空格。怎么去除這些東西呢?我們繼續編寫代碼:

find_all匹配的返回的結果是一個列表。提取匹配結果后,使用text屬性,提取文本內容,濾除br標簽。隨后使用replace方法,剔除空格,替換為回車進行分段。 在html中是用來表示空格的。replace('xa0'*8,'nn')就是去掉下圖的八個空格符號,并用回車代替:

程序運行結果如下:

可以看到,我們很自然的匹配到了所有正文內容,并進行了分段。我們已經順利獲得了一個章節的內容,要想下載正本小說,我們就要獲取每個章節的鏈接。我們先分析下小說目錄:

URL:http://www.biqukan.com/1_1094/

通過審查元素,我們發現可以發現,這些章節都存放在了class屬性為listmain的div標簽下,選取部分html代碼如下:

在分析之前,讓我們先介紹一個概念:父節點、子節點、孫節點。

和 限定了 標簽的開始和結束的位置,他們是成對出現的,有開始位置,就有結束位置。我們可以看到,在標簽包含標簽的子節點,標簽和
標簽,那么
標簽和
標簽就是標簽的孫節點。有點繞?那你記住這句話:誰包含誰,誰就是誰兒子!

他們之間的關系都是相對的。比如對于

標簽,它的子節點是標簽,它的父節點是標簽。這跟我們人是一樣的,上有老下有小。

看到這里可能有人會問,這有好多

標簽和

總結

以上是生活随笔為你收集整理的python3 爬虫实例_【实战练习】Python3网络爬虫快速入门实战解析(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。