精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

從信息泄密談到爬蟲

責任編輯:editor007

2017-03-17 20:28:41

摘自:搜狐IT

上進行售賣。舉個栗子:上海的位置是 地球—中國—上海,語法表達為 地球 中國[@城市名=上海]  接下來我們需要解析網(wǎng)頁獲取到圖書的 tag 標簽的url。

2016年8月,一位自稱“Peace”的黑客聲稱盜取了2億雅虎用戶賬戶和密碼,并尋求在暗網(wǎng)(dark web)上進行售賣。黑客所聲稱的2億條信息的泄露似乎盜取自2012年,同時發(fā)生的還有MySpace(3.6億條)和Linkedln(1億條)兩家網(wǎng)站的信息泄露。

有趣的是 Linkedln 的泄露事件還間接導致了扎克伯格的推特賬號被黑。因為扎克伯格在兩個網(wǎng)站都使用了同一個密碼:“dadada”……

在信息化時代,數(shù)據(jù)泄露無處不在,這種風險可能來自于我們上網(wǎng)的每一個步驟。下面筆者將介紹一種批量獲取信息的方式——爬蟲。編程語言基于Python,如果對這門語言不是很熟悉可以先了解下它的語法結(jié)構(gòu)。本文將對于爬蟲做一個簡單入門介紹。

關于爬蟲

我們一直在說的爬蟲究竟是個什么鬼?

網(wǎng)絡爬蟲(web crawler),是一個自動提取網(wǎng)頁的程序,它為搜索引擎從網(wǎng)路上下載網(wǎng)頁。傳統(tǒng)爬蟲從一個或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統(tǒng)的一定停止條件。另外,所有被爬蟲抓取的網(wǎng)頁將會被系統(tǒng)存貯,進行一定的分析、過濾,并建立索引,以便之后的查詢和檢索。

(摘自百度百科)

簡單來講,爬蟲是通過程序或者腳本獲取網(wǎng)頁上的一些文本、圖片、音頻的數(shù)據(jù)。

從筆者的經(jīng)驗來看,做一個簡單的爬蟲程序有以下幾個步驟:確立需求、網(wǎng)頁下載、網(wǎng)頁分析與解析、保存。接下來大家可以跟隨筆者的流程,我們來寫個抓取豆瓣書籍信息的爬蟲。

1、 需求

以豆瓣讀書為例,我們爬取豆瓣的書籍信息,需要獲取的信息包括:圖書名稱,出版社,作者,年份,評分。

  2、 網(wǎng)頁下載

頁面下載分為靜態(tài)和動態(tài)兩種下載方式。

靜態(tài)主要是純 html 頁面,動態(tài)是網(wǎng)頁會使用 java 處理,并通過Ajax 異步獲取的頁面。在這里,我們下載的是靜態(tài)頁面。

在下載網(wǎng)頁的過程中我們需要用到網(wǎng)絡庫。在 Python 中有自帶的 urllib、urllib2 網(wǎng)絡庫,但是我們一般采用基于 urllib3 的第三方庫Requests ,這是一個深受 Pythoner 喜愛的更為高效簡潔的網(wǎng)絡庫,能滿足我們目前的 web 需求。

3、 網(wǎng)頁分析與解析1)網(wǎng)頁分析:

選好網(wǎng)絡庫后我們需要做的是:分析我們要爬取的路徑——也就是邏輯。

這個過程中我們要找到爬取的每一個入口,例如豆瓣讀書的頁面。已知圖書標簽的 url,點擊每個 url 能得到圖書列表,在圖書列表中存放需要的圖書信息,求解如何獲得圖書信息。

所以很簡單!我們的爬取路徑就是:圖書標簽 url —> 圖書列表—>圖書信息。

2)網(wǎng)頁解析:

網(wǎng)頁解析主要就是通過解析網(wǎng)頁源代碼獲取我們需要的數(shù)據(jù),網(wǎng)頁解析的方式有很多種,如:正則表達式, BeautifulSoup, XPath 等等,在這里我們采用的是 XPath。Xpath 的語法很簡單,是根據(jù)路徑來進行定位。

舉個栗子:上海的位置是 地球—中國—上海,語法表達為 //地球/中國[@城市名=上海]

接下來我們需要解析網(wǎng)頁獲取到圖書的 tag 標簽的url。打開網(wǎng)頁,右擊選擇審查元素,然后就會出現(xiàn)調(diào)試工具,左上角點擊獲取我們需要的數(shù)據(jù),下面的調(diào)試窗口就會直接定位到其所在代碼。

  根據(jù)其位置,寫出其 Xpath 解析式://table[@class='tagCol']//a

這里我們看到小說在一個< table >標簽下的< td >標簽的< a >標簽里。< table >標簽可以用 class 屬性進行定位。

  以下是獲取 tag 的 url 的代碼:

獲取完了 tag ,我們還需要獲取到圖書的信息,下面我們對圖書列表頁進行解析:

  解析之后代碼如下:

  爬取的信息內(nèi)容如下:

  4、 數(shù)據(jù)保存

獲取到了數(shù)據(jù)之后,我們可以選擇把數(shù)據(jù)保存在數(shù)據(jù)庫中,或者直接寫在文件中。這里我們把數(shù)據(jù)保存到了 mongodb。接下來做一些統(tǒng)計,例如使用圖表插件 echarts,將我們的統(tǒng)計結(jié)果展示出來。

5、 爬蟲相關問題1)網(wǎng)站限制:

爬蟲過程中可能會遇到爬不到數(shù)據(jù)了的問題,這是因為相應網(wǎng)站做了一些反爬的處理來進行爬取限制,比如在爬取豆瓣的時候,就遇到了 403forbidden 。怎么辦?這時候可以通過一些相應的方法來解決,比如使用代理服務器,降低爬取速度等,在這里我們采用每次請求 sleep2秒。

2)URL 去重:

URL 去重是爬蟲運行中一項關鍵的步驟,由于運行中的爬蟲主要阻塞在網(wǎng)絡交互中,因此避免重復的網(wǎng)絡交互至關重要。爬蟲一般會將待抓取的 URL 放在一個隊列中,從抓取后的網(wǎng)頁中提取到新的 URL,在他們被放入隊列之前,首先要確定這些新的 URL 沒有被抓取過,如果之前已經(jīng)抓取過了,就不再放入隊列了。

3)并發(fā)操作:

Python 中的并發(fā)操作主要涉及的模型有:多線程模型、多進程模型、協(xié)程模型。在 Python 中可以通過:threading 模塊、multiprocessing 模塊、gevent 庫 來實現(xiàn)多線程、多進程、或協(xié)程的并發(fā)操作。

scrapy —— 強大的爬蟲框架

談到爬蟲,不得不提的是 Scrapy。Scrapy 是 Python 開發(fā)的一個快速,高層次的爬蟲框架,用于抓取 web 站點并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy 用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動化測試。

Scrapy 吸引人的地方在于它是一個框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲的基類,如 BaseSpider、sitemap 爬蟲等。

scrapy 的架構(gòu):

其中綠線是數(shù)據(jù)流向,首先從初始 URL 開始,Scheduler 會將其交給 Downloader 進行下載,下載之后會交給 Spider 進行分析,需要保存的數(shù)據(jù)則會被送到 Item Pipeline,對數(shù)據(jù)進行后期處理。

另外,在數(shù)據(jù)流動的通道里還可以安裝各種中間件,進行必要的處理。 因此在開發(fā)爬蟲的時候,最好也先規(guī)劃好各種模塊。

注:

Xpath 教程:http://www.w3school.com.cn/xpath/index.asp

Requests官方文檔:http://docs.python-requests.org/en/master/

更多的 Scrapy 請參考:http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html

本文作者:胡宇涵(點融黑幫),就職于點融網(wǎng)工程部infra團隊運維開發(fā)工程師。愛自然,愛生活。

本文由@點融黑幫(ID:DianrongMafia)原創(chuàng)發(fā)布于搜狐科技,未經(jīng)許可,禁止轉(zhuǎn)載。

鏈接已復制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號

  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 海盐县| 永年县| 桓仁| 黄梅县| 光泽县| 饶平县| 洪江市| 新建县| 益阳市| 伊春市| 玉田县| 兴业县| 石楼县| 环江| 福鼎市| 巴塘县| 呼和浩特市| 资兴市| 工布江达县| 塔河县| 台山市| 全州县| 吐鲁番市| 化州市| 威远县| 弋阳县| 苏尼特左旗| 儋州市| 金乡县| 兴国县| 永清县| 四会市| 西青区| 云南省| 巴彦县| 应城市| 南漳县| 修武县| 周宁县| 辽宁省| 阿勒泰市|