溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用BeautifulSoup怎么獲取指定class樣式的div標簽

發布時間:2020-12-07 14:41:39 來源:億速云 閱讀:529 作者:Leah 欄目:開發技術

本篇文章為大家展示了利用BeautifulSoup怎么獲取指定class樣式的div標簽,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

如何獲取指定的標簽的內容是解析網頁爬取數據的必要手段,比如想獲取<div class='xxx'> ...<div>這樣的div標簽,通常有三種辦法,

1)用字符串查找方法,然后切分字符串(或切片操作),如str.index(patternStr)或str.find(patternStr),這種方法快,但步驟多,因為要去頭去尾。

2)用正則表達式,比如'<div class="result_info">([\s\S]+&#63;)</div>',通過正則表達式的括號,可以獲取匹配的內容,即<div ..></div>之間的內容:

import re

def getTags(html):
 reg = r'<div class="result_info">([\s\S]+&#63;)</div>'
 pattern= re.compile(reg)
 tags= re.findall(pattern, html)
 return tags

不過正則表達式仍有缺點,例如'<div class="result_info">([\s\S]+&#63;)</div>'括號中的問號表示非貪婪匹配,正常情況下可以匹配到所需要的內容,但如果class="result_info"的div中還嵌套了子的div,那么正則表達式的后半部分"</div>"將會匹配子div的結尾部分</div>,而不是希望的父div.

假如有這樣一個html:

 <div class="result_info">
  <p>some paragraph test 1
  </p>
  <p>some paragraph test 2
  </p>
  <div id="div_sub" class="sub_div_style">
  some contents in sub div
  </div>
  backend content here
 </div>

那么backend contents here這段內容將會匹配不到,正則表達式將會將id為div_sub的</div>作為結尾。

3)使用第三方庫,比如BeautifulSoup,優點是準確,缺點是速度會比字符串切分、正則表達式慢,下面說說BeautifulSoup的用法。

按照BeautifulSoup官方文檔的說明怎么都不能成功,后來在百度知道(http://zhidao.baidu.com/question/433247968620775644.html)找到答案,真是扯淡,附上有效代碼:

soup=BeautifulSoup(html)
print soup.find_all(name='div',attrs={"class":"footer"})#按照字典的形式給attrs參數賦值

完整的:

from bs4 import BeautifulSoup
import urllib2

def getTargetDiv(url,myAttrs):
 html=urllib2.urlopen(url).read()
 soup=BeautifulSoup(html)
 return soup.find_all(name='div',attrs=myAttrs)

if __name__=="__main__":
 url=r'http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/'
 myAttrs={'class':'footer'}
 print getTargetDiv(url, myAttrs)

按照官方文檔(http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/)的做法:

#1.soup.find_all("a", class_="sister")
#2.css_soup.find_all("p", class_="body")
#3.soup.find_all(href=re.compile("elsie"))

改成

soup.find_all(name='div',class_=re.compile('info_item'))

或者

soup.find_all('div',class_='info_item')

都沒有匹配結果,經測試需要soup.find_all(name='div',attrs={"class":"footer"})這樣以字典的形式給attrs參數賦值才可以。

另一個例子,獲取指定樣式的div內的所有圖片url,并下載保存:

urls=[]
for img in soup.find('div',attrs={'class':'wrap'}).find_all('img'):#找到class="wrap"的div里面的所有<img>標簽
 urls.append(img.attrs['src'])#獲取img標簽的src屬性,即圖片網址

i=0
savedir=r'C:\Users\hp\Desktop\Images'#路徑中不能包含中文
for url in urls:
 urllib.urlretrieve(url, '%s\%s.jpg'%(savedir,i))
 i+=1
print 'Done'

上述內容就是利用BeautifulSoup怎么獲取指定class樣式的div標簽,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女