1. 程式人生 > >Python開發簡單爬蟲

Python開發簡單爬蟲

爬蟲是什麼?

爬蟲:一段自動抓取網際網路資訊的程式
可以從URL出發,爬取所感興趣的所有資訊,並提取資料

爬蟲的價值

網際網路資料為我所用

簡單爬蟲架構

–>爬蟲排程端(啟動爬蟲)
–>URL管理器(網頁解析器解析出新的URL補充之)
–>網頁下載器
–>網頁解析器
–>得到價值資料

簡單爬蟲架構執行流程

排程器———有待爬URL?——>URL管理器–>下載器–>解析器–>應用
<———-是/否————-
——–獲取1個待爬URL—->
<————-URL————–
——————-下載URL內容———–>
<——————-URL內容—————
———————————解析URL內容———->
<—————————價值資料,新URL列表——
———————————-收集價值資料給應用————->
——-新增到待爬URL——->

URL管理器

URL管理器
管理待抓取URL集合和怡抓取URL集合 —防止重複抓取、防止迴圈抓取

URL管理器功能
1.新增新URL到待爬取集合中,2.在新增時需判斷新增URL是否已在容器中,若存在則不新增,3.支援從容器中獲取待爬取URL,4.獲取時判斷是否還有待爬取URL,爬取後,5.最後將URL從待爬取集合移動到已爬取集合

URL管理器實現方式:
1.Python記憶體儲存URL集合;2.關係型資料庫(標明狀態);3.快取資料庫redis(流行)

網頁下載器(爬蟲核心模組)

網頁下載器:
將網際網路上URL對應的網頁下載到本地的工具

Python有幾種網頁下載器?


urllib2(python官方基礎模組)
requests(第三方包,更強大)

urllib2網頁下載器網頁的三種方法
最簡潔方法1:urllib2.urlopen(url)(在Python3.x之後,urllib2已被自動分解為urllib.request和urllib.error,所以import是要注意)
示例程式碼:

>>> import urllib.request
>>> response = urllib.request.urlopen('http://www.baidu.com')
>>> print(response.getcode())
200
>>> len(response.read()) 97871

網頁下載器方法2:新增data、http header(這個方法原理同方法1一樣)
示例程式碼:

>>> req=urllib.request.Request('http://www.baidu.com')
>>> req.add_header('user-agent','Mozilla/5.0')
>>> response1=urllib.request.urlopen(req)
>>> print(response1.getcode())
200
>>> len(response1.read())
98222

網頁下載器方法3:新增特殊情景的處理器(cookie)
示例程式碼:

>>> import http.cookiejar
>>> cj= http.cookiejar.cookieJar()
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    cj= http.cookiejar.cookieJar()
AttributeError: 'module' object has no attribute 'cookieJar'
>>> cj= http.cookiejar.CookieJar
>>> cj= http.cookiejar.CookieJar()
>>> opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor)
>>> opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
>>> urllib.request.install_opener(opener)
>>> response=urllib.request.urlopen('http://www.baidu.com')
>>> print(response.getcode())
200
>>> len(response.read())
97747
>>> print cj
SyntaxError: Missing parentheses in call to 'print'
>>> print(cj)
<CookieJar[<Cookie BAIDUID=9A1B140A4033449B4B2FFEA3160BF01E:FG=1 for .baidu.com/>, <Cookie BIDUPSID=9A1B140A4033449B4B2FFEA3160BF01E for .baidu.com/>, <Cookie H_PS_PSSID=18285_1451_17712_18205_17001_15120_12327 for .baidu.com/>, <Cookie PSTM=1457619132 for .baidu.com/>, <Cookie BDSVRTM=0 for www.baidu.com/>, <Cookie BD_HOME=0 for www.baidu.com/>]>
>>> 

網頁解析器

從網頁中提取有價值資料的工具
html網頁字串—–>網頁解析器——>價值資料/新URL列表
網頁解析器種類
正則表示式(模糊匹配)、html.parser(結構化解析)、BeautifulSoup(強大)(結構化解析)、lxml(結構化解析)
所謂結構化解析就是解析成DOM(Document Object Model)樹

BeautifulSoup的安裝
進入Python安裝目錄的Scripts目錄,裡面有個pip,命令列輸入 pip install beautifulsoup4進行安裝