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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章