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中。上代碼:
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部分的截圖如下: