聊一聊Python與網絡爬蟲。
1、爬蟲的定義
爬蟲:自動抓取互聯網數據的程序。
2、爬蟲的主要框架
爬蟲程序的主要框架如上圖所示,爬蟲調度端通過URL管理器獲取待爬取的URL鏈接,若URL管理器中存在待爬取的URL鏈接,爬蟲調度器調用網頁下載器下載相應網頁,然后調用網頁解析器解析該網頁,并將該網頁中新的URL添加到URL管理器中,將有價值的數據輸出。
3、爬蟲的時序圖
4、URL管理器
URL管理器管理待抓取的URL集合和已抓取的URL集合,防止重復抓取與循環抓取。URL管理器的主要職能如下圖所示:
URL管理器在實現方式上,Python中主要采用內存(set)、和關系數據庫(MySQL)。對于小型程序,一般在內存中實現,Python內置的set()類型能夠自動判斷元素是否重復。對于大一點的程序,一般使用數據庫來實現。
5、網頁下載器
Python中的網頁下載器主要使用urllib庫,這是python自帶的模塊。對于2.x版本中的urllib2庫,在python3.x中集成到urllib中,在其request等子模塊中。urllib中的urlopen函數用于打開url,并獲取url數據。urlopen函數的參數可以是url鏈接,也可以使request對象,對于簡單的網頁,直接使用url字符串做參數就已足夠,但對于復雜的網頁,設有防爬蟲機制的網頁,再使用urlopen函數時,需要添加http header。對于帶有登錄機制的網頁,需要設置cookie。
6、網頁解析器
網頁解析器從網頁下載器下載到的url數據中提取有價值的數據和新的url。對于數據的提取,可以使用正則表達式和BeautifulSoup等方法。正則表達式使用基于字符串的模糊匹配,對于特點比較鮮明的目標數據具有較好的作用,但通用性不高。BeautifulSoup是第三方模塊,用于結構化解析url內容。將下載到的網頁內容解析為DOM樹,下圖為使用BeautifulSoup打印抓取到的百度百科中某網頁的輸出的一部分。
關于BeautifulSoup的具體使用,在以后的文章中再寫。下面的代碼使用python抓取百度百科中英雄聯盟詞條中的其他與英雄聯盟相關的詞條,并將這些詞條保存在新建的excel中。上代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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' ) ## 百度百科:英雄聯盟## 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部分的截圖如下:
以上就是本文的全部內容,希望對大家學習Python網絡爬蟲有所幫助。