Python網(wǎng)絡(luò)爬蟲實(shí)例講解
聊一聊Python與網(wǎng)絡(luò)爬蟲。
1、爬蟲的定義
爬蟲:自動抓取互聯(lián)網(wǎng)數(shù)據(jù)的程序。
2、爬蟲的主要框架
爬蟲程序的主要框架如上圖所示,爬蟲調(diào)度端通過URL管理器獲取待爬取的URL鏈接,若URL管理器中存在待爬取的URL鏈接,爬蟲調(diào)度器調(diào)用網(wǎng)頁下載器下載相應(yīng)網(wǎng)頁,然后調(diào)用網(wǎng)頁解析器解析該網(wǎng)頁,并將該網(wǎng)頁中新的URL添加到URL管理器中,將有價值的數(shù)據(jù)輸出。
3、爬蟲的時序圖
4、URL管理器
URL管理器管理待抓取的URL集合和已抓取的URL集合,防止重復(fù)抓取與循環(huán)抓取。URL管理器的主要職能如下圖所示:
URL管理器在實(shí)現(xiàn)方式上,Python中主要采用內(nèi)存(set)、和關(guān)系數(shù)據(jù)庫(MySQL)。對于小型程序,一般在內(nèi)存中實(shí)現(xiàn),Python內(nèi)置的set()類型能夠自動判斷元素是否重復(fù)。對于大一點(diǎn)的程序,一般使用數(shù)據(jù)庫來實(shí)現(xiàn)。
5、網(wǎng)頁下載器
Python中的網(wǎng)頁下載器主要使用urllib庫,這是python自帶的模塊。對于2.x版本中的urllib2庫,在python3.x中集成到urllib中,在其request等子模塊中。urllib中的urlopen函數(shù)用于打開url,并獲取url數(shù)據(jù)。urlopen函數(shù)的參數(shù)可以是url鏈接,也可以使request對象,對于簡單的網(wǎng)頁,直接使用url字符串做參數(shù)就已足夠,但對于復(fù)雜的網(wǎng)頁,設(shè)有防爬蟲機(jī)制的網(wǎng)頁,再使用urlopen函數(shù)時,需要添加http header。對于帶有登錄機(jī)制的網(wǎng)頁,需要設(shè)置cookie。
6、網(wǎng)頁解析器
網(wǎng)頁解析器從網(wǎng)頁下載器下載到的url數(shù)據(jù)中提取有價值的數(shù)據(jù)和新的url。對于數(shù)據(jù)的提取,可以使用正則表達(dá)式和BeautifulSoup等方法。正則表達(dá)式使用基于字符串的模糊匹配,對于特點(diǎn)比較鮮明的目標(biāo)數(shù)據(jù)具有較好的作用,但通用性不高。BeautifulSoup是第三方模塊,用于結(jié)構(gòu)化解析url內(nèi)容。將下載到的網(wǎng)頁內(nèi)容解析為DOM樹,下圖為使用BeautifulSoup打印抓取到的百度百科中某網(wǎng)頁的輸出的一部分。
關(guān)于BeautifulSoup的具體使用,在以后的文章中再寫。下面的代碼使用python抓取百度百科中英雄聯(lián)盟詞條中的其他與英雄聯(lián)盟相關(guān)的詞條,并將這些詞條保存在新建的excel中。上代碼:
from bs4 import BeautifulSoup import re import xlrd <span style="font-size:18px;">import xlwt from urllib.request import urlopen excelFile=xlwt.Workbook() sheet=excelFile.add_sheet('league of legend') ## 百度百科:英雄聯(lián)盟## html=urlopen("http://baike.baidu.com/subview/3049782/11262116.htm") bsObj=BeautifulSoup(html.read(),"html.parser") #print(bsObj.prettify()) row=0 for node in bsObj.find("div",{"class":"main-content"}).findAll("div",{"class":"para"}): links=node.findAll("a",href=re.compile("^(/view/)[0-9]+\.htm$")) for link in links: if 'href' in link.attrs: print(link.attrs['href'],link.get_text()) sheet.write(row,0,link.attrs['href']) sheet.write(row,1,link.get_text()) row=row+1 excelFile.save('E:\Project\Python\lol.xls')</span>
輸出的部分截圖如下:
excel部分的截圖如下:
以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)Python網(wǎng)絡(luò)爬蟲有所幫助。
相關(guān)文章
Python3中的最大整數(shù)和最大浮點(diǎn)數(shù)實(shí)例
今天小編就為大家分享一篇Python3中的最大整數(shù)和最大浮點(diǎn)數(shù)實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Pytorch之Tensor和Numpy之間的轉(zhuǎn)換的實(shí)現(xiàn)方法
這篇文章主要介紹了Pytorch之Tensor和Numpy之間的轉(zhuǎn)換的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09pandas實(shí)現(xiàn)datetime64與unix時間戳互轉(zhuǎn)
這篇文章主要介紹了pandas實(shí)現(xiàn)datetime64與unix時間戳互轉(zhuǎn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼(批轉(zhuǎn)換編碼示例)
這篇文章主要介紹了python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼示例,指定文件編碼、目錄或擴(kuò)展名即可進(jìn)行轉(zhuǎn)換,大家參考使用吧2014-01-01Python torch.flatten()函數(shù)案例詳解
這篇文章主要介紹了Python torch.flatten()函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Python面向?qū)ο缶幊讨庋b的藝術(shù)你了解嗎
這篇文章主要為大家詳細(xì)介紹了Python面向?qū)ο缶幊讨庋b的藝術(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02python 遍歷pd.Series的index和value
今天小編就為大家分享一篇python 遍歷pd.Series的index和value,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11OpenCV模板匹配matchTemplate的實(shí)現(xiàn)
這篇文章主要介紹了OpenCV模板匹配matchTemplate的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10