一、爬蟲(chóng)的簡(jiǎn)介
爬蟲(chóng):一段自動(dòng)抓取互聯(lián)網(wǎng)信息的程序。
價(jià)值:互聯(lián)網(wǎng)數(shù)據(jù)梗肝,為我所用。
二铺董、簡(jiǎn)單的爬蟲(chóng)架構(gòu)
爬蟲(chóng)調(diào)度端——> URL管理器——>網(wǎng)頁(yè)下載器——>網(wǎng)頁(yè)分析器——>價(jià)值數(shù)據(jù)
三巫击、URL管理器
管理待抓取的URL集合和已經(jīng)抓取URL集合。防止重復(fù)抓取精续、循環(huán)抓取坝锰。
實(shí)現(xiàn)方式:1、內(nèi)存中(set())2重付、關(guān)系數(shù)據(jù)庫(kù)(MySQL)3顷级、緩存數(shù)據(jù)庫(kù)(redis)
四、網(wǎng)頁(yè)下載器(urllib2)
將互聯(lián)網(wǎng)上的URL對(duì)應(yīng)的網(wǎng)頁(yè)下載到本地的工具
網(wǎng)頁(yè)下載器的類型:
python官方基礎(chǔ)模塊:urllib2
1确垫、使用方法:
import urllib2
#直接請(qǐng)求
response = urllib2.urlopen('http://www.baidu.com')
#獲取狀態(tài)碼弓颈,如果是200表示成功
print response.getcode()
#讀取內(nèi)容
cont = response.read()
第三方包更強(qiáng)大:requests
五、網(wǎng)頁(yè)解析器(BeautifulSoup)
正則表達(dá)式 html.parser <----- BeautifulSoup -------> lxml
Beautiful Soup :python第三方庫(kù)森爽,用于從HTML或者xml中提取數(shù)據(jù)恨豁。
安裝并測(cè)試:
安裝:pip install beautifulsoup4
測(cè)試:import bs4
BeautifulSoup的語(yǔ)法:
1、創(chuàng)建BeautifulSoup對(duì)象
from bs4 import BeautifulSoup
#根據(jù)html網(wǎng)頁(yè)字符串創(chuàng)建對(duì)象
soup = BeautifulSoup(
html_doc,'html.parser',from_encoding = 'utf8'
)
#三個(gè)參數(shù)分別是:文檔字符串 解析器 文檔編碼
2爬迟、搜索節(jié)點(diǎn)(find_all,find)
···
方法:find_all(name,attrs)
查找所有為a的節(jié)點(diǎn)
soup.find_all('a')
查找所有為a,鏈接符合/view/123.html形式的節(jié)點(diǎn)
soup.find_all('a',href = '/view/123.html')
或者利用正則
soup.find_all('a',href = re.compile(r'/view/\d+.html'))
查找所有標(biāo)簽為div菊匿,class 為 abc 付呕,文字為python的節(jié)點(diǎn)
soup.find_all('div',class_ = 'abc',string = 'python')
···
3、訪問(wèn)節(jié)點(diǎn)信息
#得到節(jié)點(diǎn):<a href = '1.html'>Python</a>
#獲取查找到的節(jié)點(diǎn)的標(biāo)簽名稱
node.name
#獲取節(jié)點(diǎn)的href屬性
node['href']
#獲取查找到的節(jié)點(diǎn)a的鏈接文字
node.get_text()
六跌捆、完整實(shí)例:爬取百度百科Python詞條相關(guān)額1000個(gè)頁(yè)面數(shù)據(jù)