今天绪颖,我們來學(xué)習(xí)爬蟲抡笼。什么是爬蟲呢苏揣?
簡單來講,爬蟲是指使用一定的手段自動抓取網(wǎng)頁上的內(nèi)容蔫缸。它是搜索引擎的核心技術(shù)之一腿准。
爬蟲程序是我們用來自動抓取網(wǎng)頁內(nèi)容的手段。這里我們將講解如何利用python來編寫爬蟲程序拾碌。
要想抓取網(wǎng)頁上的內(nèi)容吐葱,首先我們要認(rèn)識網(wǎng)頁的構(gòu)成。
認(rèn)識網(wǎng)頁的構(gòu)成
網(wǎng)頁通常由三部分構(gòu)成校翔,一個網(wǎng)頁就等于一個HTML文檔:
1. HTML:結(jié)構(gòu)部分弟跑,區(qū)分每個部分具體是做什么用的,比如標(biāo)題防症、正文等孟辑,相當(dāng)于臥室、廚房等
2. CSS:<div class="">蔫敲,樣式部分饲嗽,每個部分長啥樣,地板什么顏色奈嘿,墻壁什么顏色
3. JavaScript:<script>:功能部分貌虾,房間里的電器。在爬蟲中利用較少
那么裙犹,爬取一個網(wǎng)頁尽狠,要做什么?
第一步:獲取網(wǎng)頁的內(nèi)容
為了獲取網(wǎng)頁的內(nèi)容叶圃,我們就需要知道服務(wù)器與本地的交換機制袄膏。
我們在瀏覽器輸入一個鏈接實際上是向網(wǎng)站所在的服務(wù)器發(fā)出一個請求(request),服務(wù)器在收到這個請求后就會把相應(yīng)的內(nèi)容返回(response)給我們掺冠。
請求的方法主要有兩種:get和post沉馆。我們在點擊一個按鈕或鏈接時使用的是get,發(fā)微博則是一個post行為德崭。我們使用一個爬蟲去抓取網(wǎng)頁內(nèi)容就是在模擬這些方法去獲取網(wǎng)頁內(nèi)容悍及。
我們在request時不僅僅是發(fā)送了url的信息,實際上包括你使用的設(shè)備等信息也發(fā)送過去了接癌。我們平時使用手機打開網(wǎng)頁時心赶,服務(wù)器因為知道我們使用的設(shè)備而以適合手機的方式呈現(xiàn)頁面就是這個原理。
服務(wù)器以response的形式返回給我們信息缺猛。爬蟲就是要解析網(wǎng)頁返回給我們的response信息(html文件)缨叫。
import requests
url="http://www.tripadvisor.cn/Attractions-g294217-Activities-Hong_Kong.html"
wb_data=requests.get(url)
第二步:使用BeautifulSoup解析網(wǎng)頁
from bs4 import BeautifulSoup
soup=BeautifulSoup(wb_data.text,'lxml')
beautifulsoup有兩個參數(shù)椭符,前面是待解析的文件,后面是解析文件的庫(按照什么規(guī)則解析)耻姥。
第三步:描述元素在網(wǎng)頁中所處位置
CSS Selector:描述元素在網(wǎng)頁中所處位置销钝,按照元素的位置和樣式去選取元素
titles=soup.select('div.property_title > a[target="_blank"]')
imgs=soup.select("img[width=160]")
cates=soup.select("div.p13n_reasoning_v2")
第四步:從標(biāo)簽中獲取想要的信息,并將信息裝進數(shù)據(jù)容器中琐簇,方便查詢
for title, img, cate in zip(titles,imgs,cates):
? ? data={
? ? ? ? ? ? "title":title.get_text(),
? ? ? ? ? ? "img":img.get('src'),
? ? ? ? ? ? "cate":list(cate.stripped_strings)
? ? ?}
運行結(jié)果:
深入學(xué)習(xí):
1. 如何爬取多個網(wǎng)頁蒸健?
2.需要登錄怎么辦?
3. 如何爬取移動設(shè)備網(wǎng)頁內(nèi)容婉商?
參考資料: