- 請求:導入import requests
- r=requests.get('中間是網址') 再提取 html=r.content
- 解析:導入package(包)
- from bs4 import BeautifulSoup 然后創建一BeautifulSoup對象:soup = BeautifulSoup(html,'html.parser') #html.parser是解析器a_s = div_people_list.find_all('a', attrs={'target': '_blank'}); 使用BeautifulSoup對象的find方法
div_people_list = soup.find('div', attrs={'class': 'people_list'})
這里我們使用了BeautifulSoup對象的find方法。這個方法的意思是找到帶有‘div’這個標簽并且參數包含" class = 'people_list' "的HTML代碼。如果有多個的話,find方法就取第一個。那么如果有多個呢?正好我們后面就遇到了,現在我們要取出所有的“a”標簽里面的內容:
a_s = div_people_list.find_all('a', attrs={'target': '_blank'})
這里我們使用find_all方法取出所有標簽為“a”并且參數包含“ target = ‘_blank‘ ”的代碼,返回一個列表。“a”標簽里面的“href”參數是我們需要的老師個人主頁的信息,而標簽里面的文字是老師的姓名。我們繼續:
這里我們使用BeautifulSoup支持的方法,使用類似于Python字典索引的方式把“a”標簽里面“href”參數的值提取出來,賦值給url(Python實際上是對對象的引用),用get_text()方法把標簽里面的文字提起出來。
1、請求
這里我們使用的package是requests。這是一個第三方模塊(具體怎么下載以后再說),對HTTP協議進行了高度封裝,非常好用。所謂HTTP協議,簡單地說就是一個請求過程。我們先不管這玩意是啥,以后再討論。這個部分,我們要實現的目的是把網頁請求(或者說下載)下來。
首先我們導入requests
:
import requests
下面調用requests
的get函數,把網頁請求下來:
r = requests.get('http://www.wise.xmu.edu.cn/people/faculty')
返回的“r”的是一個包含了整個HTTP協議需要的各種各樣的東西的對象。我們先不管都有啥,先把我們需要的網頁提取出來:
html = r.content
好了,到這一步我們已經獲取了網頁的源代碼。具體源代碼是什么樣的呢?右鍵,點擊“查看源文件”或者“查看源”就可以看到:
view-source:http://www.wise.xmu.edu.cn/people/faculty
2、解析
當然從這一大坨代碼里面找信息太麻煩了。我們可以用瀏覽器提供的另外一個工具:審查元素。這里我們先不講怎么使用審查元素,先從源代碼里面找。找到的我們需要的信息如下:
這里我們使用bs4來解析。bs4是一個非常好的解析網頁的庫,后面我們會詳細介紹。這次的解析先給大家看bs4里面最常用的幾個BeautifulSoup對象的方法(method)。我們使用的這幾個方法,主要是通過HTML的標簽和標簽里面的參數來定位,然后用特定方法(method)提取數據。
首先還是導入package:
from bs4 import BeautifulSoup
然后創建一個BeautifulSoup對象:
soup = BeautifulSoup(html,'html.parser') #html.parser是解析器
下面我們根據我們看到的網頁提取。首先提取我復制的這部分的代碼的第一行,先定位到這部分代碼:
div_people_list = soup.find('div', attrs={'class': 'people_list'})
這里我們使用了BeautifulSoup對象的find方法。這個方法的意思是找到帶有‘div’這個標簽并且參數包含" class = 'people_list'
"的HTML代碼。如果有多個的話,find方法就取第一個。那么如果有多個呢?正好我們后面就遇到了,現在我們要取出所有的“a”標簽里面的內容:
a_s = div_people_list.find_all('a', attrs={'target': '_blank'})
這里我們使用find_all
方法取出所有標簽為“a”并且參數包含“ target = ‘_blank‘
”的代碼,返回一個列表。“a”標簽里面的“href”參數是我們需要的老師個人主頁的信息,而標簽里面的文字是老師的姓名。我們繼續:
for a in a_s:
url = a['href']
name = a.get_text()
這里我們使用BeautifulSoup支持的方法,使用類似于Python字典索引的方式把“a”標簽里面“href”參數的值提取出來,賦值給url(Python實際上是對對象的引用),用get_text()
方法把標簽里面的文字提起出來。
事實上,使用這四個方法就可以正常地解析大部分HTML了。不過如果只用這四個方法,很多程序會寫的異常原始。所以我們后面再繼續介紹更多解析方法。
儲存
這里我們先弱化一下具體的儲存方法,先輸出到控制臺上面。我們在剛才的代碼的基礎上加一行代碼:
for a in a_s:
url = a['href']
name = a.get_text()
print name,url
使用print關鍵詞把得到的數據print出來。讓我們看看結果:
好的,到這里一個原型就完成了。這就是一個非常簡單的爬蟲,總代碼不過十幾行。復雜到幾百幾千行的爬蟲,都是在這樣的一個原型的基礎上不斷深化、不斷完善得到的。
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)