中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現簡易Web爬蟲

發布時間:2022-03-05 09:34:02 來源:億速云 閱讀:186 作者:小新 欄目:web開發

這篇文章給大家分享的是有關Python如何實現簡易Web爬蟲的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

  簡介:

  網絡爬蟲(又被稱為網頁蜘蛛),網絡機器人,是一種按照一定的規則,自動地抓信息的程序或者腳本。假設互聯網是一張很大的蜘蛛網,每個頁面之間都通過超鏈接這根線相互連接,那么我們的爬蟲小程序就能夠通過這些線不斷的搜尋到新的網頁。

  Python作為一種代表簡單主義思想的解釋型、面向對象、功能強大的高級編程語言。它語法簡潔并且具有動態數據類型和高層次的抽象數據結構,這使得它具有良好的跨平臺特性,特別適用于爬蟲等程序的實現,此外Python還提供了例如Spyder這樣的爬蟲框架,BeautifulSoup這樣的解析框架,能夠輕松的開發出各種復雜的爬蟲程序。

  在這篇文章中,使用Python自帶的urllib和BeautifulSoup庫實現了一個簡單的web爬蟲,用來爬取每個URL地址及其對應的標題內容。

  流程:

  爬蟲算法從輸入中讀取的一個URL作為初始地址,向該地址發出一個Request請求。

  請求的地址返回一個包含所有內容的,將其存入一個String變量,使用該變量實例化一個BeautifulSoup對象,該對象能夠將內容并且將其解析為一個DOM樹。

  根據自己的需要建立正則表達式,最后借助HTML標簽從中解析出需要的內容和新的URL,將新的放入隊列中。

  對于目前所處的URL地址與爬去的內容,在進行一定的過濾、整理后會建立索引,這是一個單詞-頁面的存儲結構。當用戶輸入搜索語句后,相應的分詞函數會對語句進行分解獲得關鍵詞,然后再根據每個關鍵詞查找到相應的URL。通過這種結構,可以快速的獲取這個單詞所對應的地址列表。在這里使用樹形結構的存儲方式,Python的字典和列表類型能夠較好的構建出單詞詞典樹。

  從隊列中彈出目前的URL地址,在爬取隊列不為空的條件下,算法不斷從隊列中獲取到新的網頁地址,并重復上述過程。

  實現:

  環境:

  Python3.5orAnaconda3

  BeautifulSoup4

  可以使用下面的指令安裝BeautifulSoup4,如果你是Ubuntu用戶,記得在命令前面加上sudo:

  程序分別實現了幾個類,分別用于URL地址管理,Html內容請求、Html內容解析、索引建立以及爬蟲主進程。我將整個程序按照每個Class分開解釋,最后只要將他們放在一起就可以執行代碼了。

  UrlManager類

  這個類用來管理URL地址,new_urls用來保存還未爬取的URL地址,old_urls保存了已經爬取過的地址,兩個變量都使用set類型保證其中內容的唯一性。每次循環時,add_new_urls()向外提供了向new_urls變量中添加新urls的方法;add_new_url()方法,對每個url地址進行重復性檢查,符合條件的才進行添加操作;get_urls()向外提供了獲取新的url地址的方法;has_new_url()方法用來檢查爬取隊列是否為空。

  HtmlDownloader類

  這個類實現了向url地址發送Request請求,并獲取其回應的方法,調用類內的download()方法就可實現。這里要注意的是頁面的編碼問題,這里我使用的是UTF-8來進行decode解碼,有的網頁可能使用的是GBK編碼,要根據實際情況進行修改。

  HtmlParser類

  這個類通過實例化一個BeautifulSoup對象來進行頁面的解析。它是一個使用Python編寫的HTML/XML文檔解析器。它通過將文檔解析為DOM樹的方式為用戶提供需要抓取的數據,并且提供一些簡單的函數用來處理導航、搜索、修改分析樹等功能。

  該類的關鍵是_get_new_urls()、_get_new_content()、get_url_title()三個方法。第一個方法用來解析出頁面包含的超鏈接,最為重要的選擇要解析的標簽并為其構造合適的正則表達式。這里我為a標簽定義了一個匹配正則,用來獲取所有的站內鏈接,如下:

  后面的兩個類都是通過解析Html標簽來獲取title的方法,最終在parse()中通過調取_get_new_content()來獲得title內容。具體的標簽訪問方法不細談了,讀者可以自己翻閱BeautifulSoup的官方文檔。

  BuildIndex

  該類為每個URL地址與他的標題包含的關鍵詞建立了一個索引關系并保存在一個Dict變量中,每個標題對應多個關鍵詞,每個標題也對應多個url地址,因此每個關鍵詞也對應了多個url地址,具體的形式如下:

  index={'keyword':[url1,url2,...,urln],...}

  其中,add_page_index()方法對每個標題進行了分詞處理,并且調用了add_key_index()方法將keyword-url的對應關系存到索引中,這其中也進行了重復檢查。主意,這個分詞方法僅限于英文句子,中文的話需要用到特定的分詞工具。

  SpiderMain

  這是爬蟲的主題類,它通過調用其他幾個類生成的對象來實現爬蟲的運行。該類實例化的時候會永久生成上面幾個類的對象,當通過craw()方法獲取到用戶提供的url地址時,就會依次進行請求、下載、解析、建立索引的工作。最后該方法會返回index,graph兩個變量,他們分別是:

  每個關鍵詞集齊對應的地址,keyword-urls索引,如下

  index={'keyword':[url1,url2,...,urln],...}

  每個url及其頁面中包含的urls,url-suburls索引,如下

  graph={'url':[url1,url2,...,urln],...}

  最后,我們在程序中添加下面的代碼,就可以成功的執行我們的爬蟲了

感謝各位的閱讀!關于“Python如何實現簡易Web爬蟲”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄江县| 拜泉县| 铜川市| 依兰县| 桃江县| 罗定市| 新郑市| 石首市| 彰武县| 阳城县| 榆中县| 甘肃省| 兖州市| 龙岩市| 拉萨市| 郸城县| 陇南市| 湖北省| 开阳县| 阿尔山市| 沙洋县| 大宁县| 岳阳县| 盈江县| 合肥市| 高唐县| 定安县| 桃园市| 北安市| 潍坊市| 开化县| 宁南县| 鲁甸县| 蓝山县| 沂源县| 偃师市| 马鞍山市| 西乌珠穆沁旗| 萝北县| 房产| 昂仁县|