- 請(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è)的話,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è)人主頁的信息,而標(biāo)簽里面的文字是老師的姓名。我們繼續(xù):
這里我們使用BeautifulSoup支持的方法,使用類似于Python字典索引的方式把“a”標(biāo)簽里面“href”參數(shù)的值提取出來,賦值給url(Python實(shí)際上是對(duì)對(duì)象的引用),用get_text()方法把標(biāo)簽里面的文字提起出來。
1、請(qǐng)求
這里我們使用的package是requests。這是一個(gè)第三方模塊(具體怎么下載以后再說),對(duì)HTTP協(xié)議進(jìn)行了高度封裝,非常好用。所謂HTTP協(xié)議,簡單地說就是一個(gè)請(qǐng)求過程。我們先不管這玩意是啥,以后再討論。這個(gè)部分,我們要實(shí)現(xiàn)的目的是把網(wǎng)頁請(qǐng)求(或者說下載)下來。
首先我們導(dǎo)入requests
:
import requests
下面調(diào)用requests
的get函數(shù),把網(wǎng)頁請(qǐng)求下來:
r = requests.get('http://www.wise.xmu.edu.cn/people/faculty')
返回的“r”的是一個(gè)包含了整個(gè)HTTP協(xié)議需要的各種各樣的東西的對(duì)象。我們先不管都有啥,先把我們需要的網(wǎng)頁提取出來:
html = r.content
好了,到這一步我們已經(jīng)獲取了網(wǎng)頁的源代碼。具體源代碼是什么樣的呢?右鍵,點(diǎn)擊“查看源文件”或者“查看源”就可以看到:
view-source:http://www.wise.xmu.edu.cn/people/faculty
2、解析
當(dāng)然從這一大坨代碼里面找信息太麻煩了。我們可以用瀏覽器提供的另外一個(gè)工具:審查元素。這里我們先不講怎么使用審查元素,先從源代碼里面找。找到的我們需要的信息如下:
這里我們使用bs4來解析。bs4是一個(gè)非常好的解析網(wǎng)頁的庫,后面我們會(huì)詳細(xì)介紹。這次的解析先給大家看bs4里面最常用的幾個(gè)BeautifulSoup對(duì)象的方法(method)。我們使用的這幾個(gè)方法,主要是通過HTML的標(biāo)簽和標(biāo)簽里面的參數(shù)來定位,然后用特定方法(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)頁提取。首先提取我復(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è)的話,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è)人主頁的信息,而標(biāo)簽里面的文字是老師的姓名。我們繼續(xù):
for a in a_s:
url = a['href']
name = a.get_text()
這里我們使用BeautifulSoup支持的方法,使用類似于Python字典索引的方式把“a”標(biāo)簽里面“href”參數(shù)的值提取出來,賦值給url(Python實(shí)際上是對(duì)對(duì)象的引用),用get_text()
方法把標(biāo)簽里面的文字提起出來。
事實(shí)上,使用這四個(gè)方法就可以正常地解析大部分HTML了。不過如果只用這四個(gè)方法,很多程序會(huì)寫的異常原始。所以我們后面再繼續(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出來。讓我們看看結(jié)果:
好的,到這里一個(gè)原型就完成了。這就是一個(gè)非常簡單的爬蟲,總代碼不過十幾行。復(fù)雜到幾百幾千行的爬蟲,都是在這樣的一個(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)