- 請(qǐng)求:導(dǎo)入import requests
- r=requests.get('中間是網(wǎng)址') 再提取 html=r.content
- 解析:導(dǎo)入package(包)
- from bs4 import BeautifulSoup 然后創(chuàng)建一BeautifulSoup對(duì)象:soup = BeautifulSoup(html,'html.parser') #html.parser是解析器a_s = div_people_list.find_all('a', attrs={'target': '_blank'})组橄; 使用BeautifulSoup對(duì)象的find方法
div_people_list = soup.find('div', attrs={'class': 'people_list'})
這里我們使用了BeautifulSoup對(duì)象的find方法嘉熊。這個(gè)方法的意思是找到帶有‘div’這個(gè)標(biāo)簽并且參數(shù)包含" class = 'people_list' "的HTML代碼悔雹。如果有多個(gè)的話(huà)宠进,find方法就取第一個(gè)腰鬼。那么如果有多個(gè)呢劣领?正好我們后面就遇到了浓恳,現(xiàn)在我們要取出所有的“a”標(biāo)簽里面的內(nèi)容:
a_s = div_people_list.find_all('a', attrs={'target': '_blank'})
這里我們使用find_all方法取出所有標(biāo)簽為“a”并且參數(shù)包含“ target = ‘_blank‘ ”的代碼琢感,返回一個(gè)列表「庋常“a”標(biāo)簽里面的“href”參數(shù)是我們需要的老師個(gè)人主頁(yè)的信息亩鬼,而標(biāo)簽里面的文字是老師的姓名。我們繼續(xù):
這里我們使用BeautifulSoup支持的方法阿蝶,使用類(lèi)似于Python字典索引的方式把“a”標(biāo)簽里面“href”參數(shù)的值提取出來(lái)雳锋,賦值給url(Python實(shí)際上是對(duì)對(duì)象的引用),用get_text()方法把標(biāo)簽里面的文字提起出來(lái)羡洁。
1玷过、請(qǐng)求
這里我們使用的package是requests。這是一個(gè)第三方模塊(具體怎么下載以后再說(shuō))筑煮,對(duì)HTTP協(xié)議進(jìn)行了高度封裝辛蚊,非常好用。所謂HTTP協(xié)議真仲,簡(jiǎn)單地說(shuō)就是一個(gè)請(qǐng)求過(guò)程袋马。我們先不管這玩意是啥,以后再討論秸应。這個(gè)部分虑凛,我們要實(shí)現(xiàn)的目的是把網(wǎng)頁(yè)請(qǐng)求(或者說(shuō)下載)下來(lái)。
首先我們導(dǎo)入requests
:
import requests
下面調(diào)用requests
的get函數(shù)软啼,把網(wǎng)頁(yè)請(qǐng)求下來(lái):
r = requests.get('http://www.wise.xmu.edu.cn/people/faculty')
返回的“r”的是一個(gè)包含了整個(gè)HTTP協(xié)議需要的各種各樣的東西的對(duì)象桑谍。我們先不管都有啥,先把我們需要的網(wǎng)頁(yè)提取出來(lái):
html = r.content
好了祸挪,到這一步我們已經(jīng)獲取了網(wǎng)頁(yè)的源代碼锣披。具體源代碼是什么樣的呢?右鍵贿条,點(diǎn)擊“查看源文件”或者“查看源”就可以看到:
view-source:http://www.wise.xmu.edu.cn/people/faculty
2盈罐、解析
當(dāng)然從這一大坨代碼里面找信息太麻煩了。我們可以用瀏覽器提供的另外一個(gè)工具:審查元素闪唆。這里我們先不講怎么使用審查元素,先從源代碼里面找钓葫。找到的我們需要的信息如下:
這里我們使用bs4來(lái)解析悄蕾。bs4是一個(gè)非常好的解析網(wǎng)頁(yè)的庫(kù),后面我們會(huì)詳細(xì)介紹。這次的解析先給大家看bs4里面最常用的幾個(gè)BeautifulSoup對(duì)象的方法(method)帆调。我們使用的這幾個(gè)方法奠骄,主要是通過(guò)HTML的標(biāo)簽和標(biāo)簽里面的參數(shù)來(lái)定位,然后用特定方法(method)提取數(shù)據(jù)番刊。
首先還是導(dǎo)入package:
from bs4 import BeautifulSoup
然后創(chuàng)建一個(gè)BeautifulSoup對(duì)象:
soup = BeautifulSoup(html,'html.parser') #html.parser是解析器
下面我們根據(jù)我們看到的網(wǎng)頁(yè)提取含鳞。首先提取我復(fù)制的這部分的代碼的第一行,先定位到這部分代碼:
div_people_list = soup.find('div', attrs={'class': 'people_list'})
這里我們使用了BeautifulSoup對(duì)象的find方法芹务。這個(gè)方法的意思是找到帶有‘div’這個(gè)標(biāo)簽并且參數(shù)包含" class = 'people_list'
"的HTML代碼蝉绷。如果有多個(gè)的話(huà),find方法就取第一個(gè)枣抱。那么如果有多個(gè)呢熔吗?正好我們后面就遇到了,現(xiàn)在我們要取出所有的“a”標(biāo)簽里面的內(nèi)容:
a_s = div_people_list.find_all('a', attrs={'target': '_blank'})
這里我們使用find_all
方法取出所有標(biāo)簽為“a”并且參數(shù)包含“ target = ‘_blank‘
”的代碼佳晶,返回一個(gè)列表桅狠。“a”標(biāo)簽里面的“href”參數(shù)是我們需要的老師個(gè)人主頁(yè)的信息轿秧,而標(biāo)簽里面的文字是老師的姓名中跌。我們繼續(xù):
for a in a_s:
url = a['href']
name = a.get_text()
這里我們使用BeautifulSoup支持的方法,使用類(lèi)似于Python字典索引的方式把“a”標(biāo)簽里面“href”參數(shù)的值提取出來(lái)菇篡,賦值給url(Python實(shí)際上是對(duì)對(duì)象的引用)漩符,用get_text()
方法把標(biāo)簽里面的文字提起出來(lái)。
事實(shí)上逸贾,使用這四個(gè)方法就可以正常地解析大部分HTML了陨仅。不過(guò)如果只用這四個(gè)方法,很多程序會(huì)寫(xiě)的異常原始铝侵。所以我們后面再繼續(xù)介紹更多解析方法灼伤。
儲(chǔ)存
這里我們先弱化一下具體的儲(chǔ)存方法,先輸出到控制臺(tái)上面咪鲜。我們?cè)趧偛诺拇a的基礎(chǔ)上加一行代碼:
for a in a_s:
url = a['href']
name = a.get_text()
print name,url
使用print關(guān)鍵詞把得到的數(shù)據(jù)print出來(lái)狐赡。讓我們看看結(jié)果:
好的,到這里一個(gè)原型就完成了疟丙。這就是一個(gè)非常簡(jiǎn)單的爬蟲(chóng)颖侄,總代碼不過(guò)十幾行。復(fù)雜到幾百幾千行的爬蟲(chóng)享郊,都是在這樣的一個(gè)原型的基礎(chǔ)上不斷深化览祖、不斷完善得到的。
from bs4 import BeautifulSoup
import requests
r = requests.get('http://www.wise.xmu.edu.cn/people/faculty')
html = r.content
view-source:http://www.wise.xmu.edu.cn/people/faculty
soup = BeautifulSoup(html,'html.parser') #html.parser是解析器
div_people_list = soup.find('div', attrs={'class': 'people_list'})
a_s = div_people_list.find_all('a', attrs={'target': '_blank'})
for a in a_s:
url = a['href']
name = a.get_text()
for a in a_s:
url = a['href']
name = a.get_text()
print (name,url)
原網(wǎng)頁(yè)http://www.100weidu.com/weixin/CMy033CKgj