python如何全网爬取_如何通过Python爬取互联网
大家用過谷歌,百度吧。這類搜索引擎是怎么對外提供服務的呢?顯然,這不是本文要說的事情。但是,任何一個搜索引擎,都缺不了網頁收錄這個步驟,所以網絡爬蟲是搜素引擎最重要,也是最基本的組成部分。那么我們每個人其實都可以寫一個簡單的網絡爬蟲,用來爬你自己喜歡的東西,你懂的。那么,我們就廢話少說,開始吧。
網絡爬蟲(網絡蜘蛛)經常被人們認為是一項特別強大而實用的工具,用來從網上搜集各種不同的數據。其實它的本質就是通過編程的手段來訪問一系列不同的網頁并抽取頁面中的數據信息。
利用網絡爬蟲,我們可以搜集文本,圖片以及其他類型的數據。而這些事情,并不需要通過你要訪問的網站提供官方的API,你只需要模擬瀏覽器的行為來達到這個簡單的目的。
在這里,你會了解到網絡爬取信息的基本概念和組成部分。我們也會用Quotes to Scrape(http://quotes.toscrape.com/)作為例子來了解如何抽取這個網站上面我們所關心的數據。跟著一路走下來,你會完成一個簡單的網絡爬蟲,它的功能就是爬取Quotes to Scrape(http://quotes.toscrape.com/)的頁面,并且抽取我們所關心的數據。
熱身,熱身
既然安裝完了Python,下面就來看看,如何創建一個簡單的爬蟲。創建爬蟲有好多方式,條條大路通羅馬。但是,我們想走效率高的,不繞彎的,不掉坑里的一條路。開源社區有很多不錯的選擇,在這里,我選用的是Scrapy框架。Scrapy幫助我們解決了絕大部分的繁瑣事情,讓我們真正專注于要關心的邏輯,也就是你要爬取哪些頁面,抽取哪些數據,并如何存儲它們。
如何安裝Scrapy?非常簡單,打開Shell或者命令行窗口,運行下面的命令
$pip install scrapy
如上圖所示,Scrapy安裝成功了。我們可以運行一個簡單的命令,來檢驗一下Scrapy是否可以正常工作。運行如下命令,是否返回HTML的內容。
如果能夠返回HTML頁面的信息,則說明scrapy工作正常。接下來,我們可以創建一個文件夾,用來保存我們的爬蟲類。運行下面的命令,創建一個文件夾
$mkdir scrapy-spiders
進入你剛創建的文件夾
$cd scrapy-spiders
創建一個新的Python文件(用你自己喜歡的文本編輯器,我這里用的是VIM),文件名稱叫quotespider.py。
$vim quotespider.py
我們通過創建一個scrapy.Spider的派生類,來達到簡化繁瑣工作的目的。大部分的工作已經被包含在scrapy.Spider這個類當中了,這個類是scrapy框架提供的。我們需要修改其中的屬性,就可以達到自定義的目的。這里,我們為了簡化和演示的目的,僅僅修改兩個屬性,name和start_urls。
name--- 給你的網絡爬蟲起一個名字
start_urls--- 網絡爬蟲從哪個網址開始爬取,可以是一個網址,也可以是一批網址
修改之后的quotespider.py文件內容如下:
讓我們簡單地逐行說明一下程序代碼的意思。首先,我們在程序第一行中引入scrapy框架。然后,我們在第二行創建了一個名字叫做QuoteSpider的類。這個類是scrapy.Spider的子類。接著,我們在第三行,第四行修改了name和start_urls的屬性。好啦,我們第一步的任務結束啦。現在可以運行一下,看看結果是什么。
大家看到紅線的部分,返回值是200,證明我們成功地爬取了網址。但是,下面有錯誤,原因是藍線的部分造成的。下面將在第二部分修正這個部分。實現一個parse的方法,來告訴爬蟲,當成功爬取了網址之后,我們需要如何解析這個網頁的內容。也就是如何抽取頁面當中我們關心的數據。
在實現如何解析頁面之前,讓我們看一下頁面的結構,從而發現在哪里可以找到我們關心的數據。借助Chrome的開發者工具,我們可以定位到我們需要抽取的信息節點的位置。假設我要抽取每段的名句,并不關心作者是誰。
用開發者工具,我找到了這個信息在HTML文檔DOM樹中的結點位置。
那么我就可以用scrapy框架自帶的CSS或者XPath選擇器,來選中我關心的結點,然后讀取里面的文本值。修改之后的quotespider.py文件內容為
運行一下程序,結果如下
假如,進一步我們需要把作者信息也抽取出來,那么我們只需要再多加一行代碼,來讀取作者的信息。
運行結果就會包含作者信息了。
到目前為止,你已經會爬取一個單獨的頁面,并且可以抽取你想要的信息了。如果我們想抽取的信息是保存在頁面中某個超鏈接里面呢?那就需要進一步訪問那個超鏈接去獲得進一步的信息。下一步介紹如果繼續訪問頁面中的超鏈接,你其實也應該想得到,跟訪問一個頁面是同樣的。只需要獲得那個超鏈接的網址,爬取那個頁面,并按照剛才的步驟去解析網頁就好了。
我們觀察到每一句名言下面都有作者,作者的后面跟著一個超鏈接,用來介紹作者的詳細信息。那么就可以通過CSS選擇器選中超鏈接,并且訪問那個超鏈接。對于超鏈接返回的頁面,可以自定義一個專門用來解析作者詳細信息的方法,叫做parse_author。那么,就很容易抽取我們想要的作者詳細信息了。
下面是修改之后的quotespider.py文件內容
在代碼中,可以看到通過".author+a::attr(href)"選中了超鏈接的相對地址,然后調用response.follow方法,并設置parse_author作為解析頁面的方法。parse_author的方法內部,對三個頁面標簽做了抽取,他們是名字,出生日期和出生地點。運行一下程序,結果如下
從程序輸出結果來看,我們成功的抽取了超鏈接的內容。根據這個思路,可以設計一個比較復雜的爬蟲,來爬取這個網站的所有頁面,并把相關的數據保存下來。
關于如何保存成不同類型的文件,而不是輸出到shell或者控制臺中,可以實用命令行參數-o,比如下面就是一個輸出成JSON的例子。Scrapy還支持多種文件格式,比如csv,JSON Lines,XML。
$scrapy runspider quotespider.py -o crawlresult.json
到這里,就介紹完了如何創建一個簡單的爬蟲。
參考鏈接:
Scrapy Library: https://doc.scrapy.org/en/latest/intro/overview.html
總結
以上是生活随笔為你收集整理的python如何全网爬取_如何通过Python爬取互联网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libsvm java 实例_LibSV
- 下一篇: java mysql 回滚_Java 中