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