国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python網(wǎng)絡(luò)爬蟲實(shí)例講解

2019-11-25 16:49:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

聊一聊Python與網(wǎng)絡(luò)爬蟲。

1、爬蟲的定義

爬蟲:自動(dòng)抓取互聯(lián)網(wǎng)數(shù)據(jù)的程序。

2、爬蟲的主要框架

爬蟲程序的主要框架如上圖所示,爬蟲調(diào)度端通過(guò)URL管理器獲取待爬取的URL鏈接,若URL管理器中存在待爬取的URL鏈接,爬蟲調(diào)度器調(diào)用網(wǎng)頁(yè)下載器下載相應(yīng)網(wǎng)頁(yè),然后調(diào)用網(wǎng)頁(yè)解析器解析該網(wǎng)頁(yè),并將該網(wǎng)頁(yè)中新的URL添加到URL管理器中,將有價(jià)值的數(shù)據(jù)輸出。

3、爬蟲的時(shí)序圖


4、URL管理器

URL管理器管理待抓取的URL集合和已抓取的URL集合,防止重復(fù)抓取與循環(huán)抓取。URL管理器的主要職能如下圖所示:


URL管理器在實(shí)現(xiàn)方式上,Python中主要采用內(nèi)存(set)、和關(guān)系數(shù)據(jù)庫(kù)(MySQL)。對(duì)于小型程序,一般在內(nèi)存中實(shí)現(xiàn),Python內(nèi)置的set()類型能夠自動(dòng)判斷元素是否重復(fù)。對(duì)于大一點(diǎn)的程序,一般使用數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)。

5、網(wǎng)頁(yè)下載器

Python中的網(wǎng)頁(yè)下載器主要使用urllib庫(kù),這是python自帶的模塊。對(duì)于2.x版本中的urllib2庫(kù),在python3.x中集成到urllib中,在其request等子模塊中。urllib中的urlopen函數(shù)用于打開url,并獲取url數(shù)據(jù)。urlopen函數(shù)的參數(shù)可以是url鏈接,也可以使request對(duì)象,對(duì)于簡(jiǎn)單的網(wǎng)頁(yè),直接使用url字符串做參數(shù)就已足夠,但對(duì)于復(fù)雜的網(wǎng)頁(yè),設(shè)有防爬蟲機(jī)制的網(wǎng)頁(yè),再使用urlopen函數(shù)時(shí),需要添加http header。對(duì)于帶有登錄機(jī)制的網(wǎng)頁(yè),需要設(shè)置cookie。

6、網(wǎng)頁(yè)解析器

網(wǎng)頁(yè)解析器從網(wǎng)頁(yè)下載器下載到的url數(shù)據(jù)中提取有價(jià)值的數(shù)據(jù)和新的url。對(duì)于數(shù)據(jù)的提取,可以使用正則表達(dá)式和BeautifulSoup等方法。正則表達(dá)式使用基于字符串的模糊匹配,對(duì)于特點(diǎn)比較鮮明的目標(biāo)數(shù)據(jù)具有較好的作用,但通用性不高。BeautifulSoup是第三方模塊,用于結(jié)構(gòu)化解析url內(nèi)容。將下載到的網(wǎng)頁(yè)內(nèi)容解析為DOM樹,下圖為使用BeautifulSoup打印抓取到的百度百科中某網(wǎng)頁(yè)的輸出的一部分。


關(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部分的截圖如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Python網(wǎng)絡(luò)爬蟲有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岳池县| 日照市| 佳木斯市| 德惠市| 政和县| 闸北区| 莒南县| 大姚县| 岑溪市| 元谋县| 泰安市| 吴旗县| 荣昌县| 襄城县| 虞城县| 健康| 三台县| 新绛县| 武夷山市| 孝义市| 韶山市| 探索| 新巴尔虎右旗| 青川县| 怀来县| 西乌| 资阳市| 长子县| 张北县| 鹿邑县| 库车县| 房山区| 清涧县| 尼勒克县| 建始县| 遂溪县| 嘉定区| 贵港市| 连江县| 皮山县| 岑溪市|