聊一聊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。對於資料的提取,可以使用Regex和BeautifulSoup等方法。Regex使用基於字串的模糊比對,對於特點比較鮮明的目標資料具有較好的作用,但通用性不高。BeautifulSoup是第三方模組,用於結構化解析url內容。將下載到的網頁內容解析為DOM樹,為使用BeautifulSoup列印抓取到的百度百科中某網頁的輸出的一部分。
關於BeautifulSoup的具體使用,在以後的文章中再寫。下面的代碼使用python抓取百度百科中英雄聯盟詞條中的其他與英雄聯盟相關的詞條,並將這些詞條儲存在建立的excel中。上代碼:
from bs4 import BeautifulSoup import re import xlrd 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')
輸出的部分如下:
excel部分的如下:
以上就是本文的全部內容,希望對大家學習Python網路爬蟲有所協助。