Python3網絡爬蟲(一):利用urllib進行簡單的網頁抓取

2021-03-02 Java小白學心理
點擊藍色字免費訂閱,每天收到這樣的好信息



前言:最近有不少粉絲關注本公眾號。並且我已經成功開通了流量主同時會賺一點點廣告費,我打算每個月把這部分錢拿出來給大家買點書刊,算是給大家一點福利吧。大家想買什麼書掃描下方的加他拉你加群。最後,非常感謝大家的關注。

運行平臺:Windows
Python版本:Python3.x
IDE:Sublime text3

轉載請註明作者和出處:http://blog.csdn.net/c406495762/article/details/58716886

    一直想學習Python爬蟲的知識,在網上搜索了一下,大部分都是基於Python2.x的。因此打算寫一個Python3.x的爬蟲筆記,以便後續回顧,歡迎一起交流、共同進步。

一、預備知識

1.Python3.x基礎知識學習:

    可以在通過如下方式進行學習:

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

    URL:http://www.liaoxuefeng.com/

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

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

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

    小甲魚老師很厲害,講課風格幽默詼諧,如果時間充裕可以考慮看視頻。

    URL:http://www.fishc.com/

2.開發環境搭建:

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

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

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

二、網絡爬蟲的定義

    網絡爬蟲,也叫網絡蜘蛛(Web Spider),如果把網際網路比喻成一個蜘蛛網,Spider就是一隻在網上爬來爬去的蜘蛛。網絡爬蟲就是根據網頁的地址來尋找網頁的,也就是URL。舉一個簡單的例子,我們在瀏覽器的地址欄中輸入的字符串就是URL,例如:https://www.baidu.com/

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

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

    URL的格式由三部分組成:

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

    (2)hostname[:port]:第二部分就是主機名(還有埠號為可選參數),一般網站默認的埠號為80,例如百度的主機名就是www.baidu.com,這個就是伺服器的地址;

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

    網絡爬蟲就是根據這個URL來獲取網頁信息的。

三、簡單爬蟲實例

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

1.urllib.request模塊是用來打開和讀取URLs的;

2.urllib.error模塊包含一些有urllib.request產生的錯誤,可以使用try進行捕捉處理;

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

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

    我們使用urllib.request.urlopen()這個接口函數就可以很輕鬆的打開一個網站,讀取並列印信息。

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

    了解到這些,我們就可以寫一個最簡單的程序,文件名為urllib_test01.py,感受一個urllib庫的魅力:

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

if __name__ == "__main__":
response = request.urlopen("http://fanyi.baidu.com")
html = response.read()
print(html)

    urllib使用使用request.urlopen()打開和讀取URLs信息,返回的對象response如同一個文本對象,我們可以調用read(),進行讀取。再通過print(),將讀到的信息列印出來。

    運行程序ctrl+b,可以在Sublime中查看運行結果,如下:

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

python urllib_test01.py

    運行py文件,輸出信息是一樣的,如下:

    其實這就是瀏覽器接收到的信息,只不過我們在使用瀏覽器的時候,瀏覽器已經將這些信息轉化成了界面信息供我們瀏覽。當然這些代碼我們也可以從瀏覽器中查看到。例如,使用谷歌瀏覽器,在任意界面單擊右鍵選擇檢查,也就是審查元素(不是所有頁面都可以審查元素的,例如起點中文網付費章節就不行.),以百度界面為例,截圖如下:

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

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

    有些跑偏,不過說的道理就是,瀏覽器就是作為客戶端從伺服器端獲取信息,然後將信息解析,再展示給我們的。

    回歸正題,雖然我們已經成功獲取了信息,但是顯然他們都是二進位的亂碼,看起來很不方便。我們怎麼辦呢?

    我們可以通過簡單的decode()命令將網頁的信息進行解碼,並顯示出來,我們新創建一個文件,命名為urllib_test02.py,編寫如下代碼(還是以百度翻譯網站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)

    這樣我們就可以得到這樣的結果,顯然解碼後的信息看起來工整和舒服多了:

    當然這個前提是我們已經知道了這個網頁是使用utf-8編碼的,怎麼查看網頁的編碼方式呢?需要人為操作,且非常簡單的方法是使用使用瀏覽器審查元素,只需要找到head標籤開始位置的chareset,就知道網頁是採用何種編碼的了。如下:

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

四、自動獲取網頁編碼方式的方法

    獲取網頁編碼的方式有很多,個人更喜歡用第三方庫的方式。

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

pip install chardet

    安裝好後,我們就可以使用chardet.detect()方法,判斷網頁的編碼方式了。至此,我們就可以編寫一個小程序判斷網頁的編碼方式了,新建文件名為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)

    運行程序,查看輸出結果如下:

    瞧,返回的是一個字典,這樣我們就知道網頁的編碼方式了,通過獲得的信息,採用不同的解碼方式即可。

PS:關於編碼方式的內容,可以自行百度,或者看下這篇博客:

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

我不在乎我的作品文章是被現在的人讀還是由子孫後代來讀。既然上帝花了六千年來等一位觀察者,我可以花上一個世紀來等待讀者。

相關焦點

  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    而這裡的「技術手段」就是指網絡爬蟲。 今天,小編將與您分享一個爬蟲的基本知識和入門教程:什麼是爬蟲?網絡爬蟲,也叫作網絡數據採集,是指通過編程從Web伺服器請求數據(HTML表單),然後解析HTML以提取所需的數據。
  • Python爬蟲數據抓取方法匯總!所有方法都在此!
    1、python進行網頁數據抓取有兩種方式:一種是直接依據url連結來拼接使用get方法得到內容,一種是構建post
  • 為什麼開發爬蟲都用Python呢?
    Python Python語言的網絡功能強大,能夠模擬登陸,解析JavaScript,短處是網頁解析。Python寫起程序來很便捷,尤其是對聚焦爬蟲,目標網站經常變換,要根據目標的變化修改爬蟲程序,使用Python開發就顯得很方便。
  • Python爬蟲學習:抓取電影網站內容的爬蟲
    Python現在非常火,語法簡單而且功能強大,很多同學都想學Python!所以小的給各位看官們準備了高價值Python學習視頻教程及相關電子版書籍,歡迎前來領取!實現思路:抓取一個電影網站中的所有電影的思路如下:根據一個URL得到電影網站的所有分類得到每個分類中的電影的頁數根據其電影分類的URL規律構造每個分類中每個頁面的URL分析每個頁面中的html,並用正則把電影信息過濾出來準備工作:
  • Python網頁爬蟲工具有哪些?
    不管文本處理,機器學習和數據發掘,都需求數據,除了通過一些途徑購買或者下載的專業數據外,常常需求我們自己著手爬數據,爬蟲就顯得分外重要。那麼,Python網頁爬蟲東西有哪些呢?1、ScrapyScrapy相Scrapy, a fast high-level screen scraping and web crawling framework for Python.信不少同學都有耳聞,課程圖譜中的許多課程都是依託Scrapy抓去的,這方面的介紹文章有許多,引薦大牛pluskid早年的一篇文章:《Scrapy 輕鬆定製網絡爬蟲》,歷久彌新。
  • 5分鐘快速學習掌握python爬蟲Beautifulsoup解析網頁
    python爬蟲用Beatifulsoup庫解析網頁提取所需元素新手看懂個人觀點:之前我們有講過爬蟲和網頁的一些聯繫,網頁的一些組成部分,爬蟲就是對網頁裡面的數據進行提取然後對其進行數據處理,篩選出所需部分,供需要者使用。
  • 什麼是Python爬蟲?華為科普知識來看看
    《小白看過來,讓Python爬蟲成為你的好幫手》原文:隨著信息化社會的到來,人們對網絡爬蟲這個詞已經不再陌生。但什麼是爬蟲,如何利用爬蟲為自己服務,這些在ICT技術小白聽起來又有些高入雲端。不用愁,下面一文帶你走近爬蟲世界,讓即使身為ICT技術小白的你,也能秒懂使用Python爬蟲高效抓取圖片。什麼是專用爬蟲?網絡爬蟲是一種從網際網路抓取數據信息的自動化程序。如果我們把網際網路比作一張大的蜘蛛網,數據便是存放於蜘蛛網的各個節點,而爬蟲就是一隻小蜘蛛(程序),沿著網絡抓取自己的獵物(數據)。
  • 這款Chrome 插件就能幫你完成網頁抓取
    ▲朋友圈廣告的確,作為一門易於上手的程式語言,Python 在自動化辦公中用處巨大,特別是對於網頁數據的爬取,在這樣一個大數據時代顯得尤為重要。爬取網頁數據,也可以稱為『網絡爬蟲』 ,能幫助我們快速搜集網際網路的海量內容,從而進行深度的數據分析與挖掘。
  • python爬蟲實戰:爬取全站小說排行榜
    新筆趣閣是廣大書友最值得收藏的網絡小說閱讀網,網站收錄了當前.我就不打廣告了(其他滿足下文條件的網站也行,之前已經有做過簡單爬取章節的先例了,但效果不太理想,有很多不需要的成分被留下了,來連結:http://python.jobbole.com
  • Python 爬蟲實戰:貓眼電影
    由於數據中缺少導演/演員/編劇陣容等信息,所以爬取貓眼電影數據進行補充。關於爬蟲的教學內容,網絡上一搜就有很多了,這裡我以個人的爬蟲習慣,介紹此次過程中所用到的庫和代碼。流程圖,如下圖所示:·concurrent.futures庫  利用多核CPU提升執行速度。
  • 不用代碼玩轉爬蟲實例(1) - 抓取貓眼電影信息
    有很多朋友在日常的工作生活當中需要抓取網頁上的信息,進行相關的行業分析或者準備資料、報告使用。
  • 手把手教你使用Python網絡爬蟲獲取B站視頻選集內容(附源碼)
    &識別(前端+後端實現高效率數據標註)Python項目實戰篇——常用驗證碼標註&識別(數據採集/預處理/字符圖切割)Python項目實戰篇——常用驗證碼標註和識別(需求分析和實現思路)    之前也有給大家分享B站的一些文章,感興趣的話可以看看這個文章,Python網絡爬蟲+數據分析:手把手教你用Python網絡爬蟲獲取
  • 爬蟲 | 如何快速獲取網頁URL連結
    這篇推文將是對上篇文章的進一步深入,主要介紹如何將其他分類中排在前10%的電影一起抓取下來。其實,這個操作非常簡單,只需要在上篇推文創建的規則上添加一個條件就可以了。即在「DS打數機」中,右鍵點擊「主題—管理線索—添加」,按提示,將URL網址依次添加進來即可。但,最大的問題在於,如何獲取URL?
  • Python網絡爬蟲-第一行代碼-windows環境
    Python有強大的支持爬蟲功能的庫,是爬取網頁數據的首選。先看看是否有Python:cmd界面執行Python已經安裝完成,版本是2.7.15。可能是我安裝vue開發環境或者安卓開發環境的時候順便裝上了。然後檢查pip是否安裝。
  • Python漫畫爬蟲——漫畫喵的100行代碼逆襲
    在bing上搜索Python、爬蟲框架。找到大家常用的框架。Scrapy似乎是個很不錯的選擇。至於相對於其他框架的優點,小喵沒有細查,至少這個框架是之前聽過的。但是在實現的時候發現有一些問題,scrapy不能直接抓取動態的頁面。小喵需要抓取的網站的漫畫都是使用Ajax生成的。需要自己分析各種數據,這個有點麻煩。那麼有沒有可以渲染頁面的工具呢?
  • 搜尋引擎蜘蛛(爬蟲)工作過程及原理
    什麼是搜尋引擎爬蟲,搜尋引擎爬蟲是如何工作的。搜尋引擎爬蟲也叫做搜尋引擎蜘蛛,是用來抓取網頁信息的,搜尋引擎抓取過程分為大致五個步驟。#Python爬蟲#分別是:抓取 → 存放 → 甄別 → 收錄 → 權重衡量分配排名搜尋引擎蜘蛛首先會抓取網頁信息,把抓取到的信息存放到搜尋引擎臨時資料庫中,接著搜尋引擎會根據自身的甄別原則分析信息價值,有價值的信息保留下來,沒有價值的信息進行刪除處理。
  • 開課吧Python:Python爬蟲是什麼?爬蟲工程師薪資怎麼樣?
    Python爬蟲是什麼?Python爬蟲是什麼?Python爬蟲是由Python程序開發的網絡爬蟲(webspider,webrobot),是按照一定規則自動抓取全球資訊網信息的程序或腳本。其實一般是通過程序在網頁上獲取你想要的數據,也就是自動抓取數據。為什麼需要用爬蟲?你可以想像一個場景:你在微博上崇拜一個名人,被他的微博迷住了。你要把他這十年微博裡的每一句話都摘抄下來。這個時候你會怎麼做?手動上Ctrl+C和Ctrl+V?這個方法是對的。在數據量很小的情況下我們還是可以這樣做的,但是在數據數千的情況下你還是要這樣做嗎?
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    今天介紹python爬蟲的學習。網絡爬蟲 網絡爬蟲,也叫網絡蜘蛛(Web Spider)。爬蟲是根據網頁地址(URL)爬取網頁上的內容,這裡說的網頁地址(URL)就是我們在瀏覽器中輸入的網站連結。例如:https://www.baidu.com/,這就是一個URL。
  • 編寫你的第一個爬蟲程序
    ,所以就分享一個乾貨吧:如何寫第一個有價值的爬蟲程序。什麼是爬蟲?可以很簡單地理解為讓計算機自動幫我們瀏覽指定網站並獲得我們想要的數據。比如我們想獲得某個商品的所有評價信息、指定區域的房價指標、蔡徐坤的粉絲信息(呃,這個好像沒啥必要…)