欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

BeautifulSoup獲取指定class樣式的div的實現(xiàn)

 更新時間:2020年12月07日 10:58:33   作者:morein2008  
這篇文章主要介紹了BeautifulSoup獲取指定class樣式的div的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

如何獲取指定的標(biāo)簽的內(nèi)容是解析網(wǎng)頁爬取數(shù)據(jù)的必要手段,比如想獲取<div class='xxx'> ...<div>這樣的div標(biāo)簽,通常有三種辦法,

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

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

import re

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


不過正則表達式仍有缺點,例如'<div class="result_info">([\s\S]+?)</div>'括號中的問號表示非貪婪匹配,正常情況下可以匹配到所需要的內(nèi)容,但如果class="result_info"的div中還嵌套了子的div,那么正則表達式的后半部分"</div>"將會匹配子div的結(jié)尾部分</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這段內(nèi)容將會匹配不到,正則表達式將會將id為div_sub的</div>作為結(jié)尾。

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

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

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

完整的:

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')

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

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

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

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'

更多用法,可參考:http://www.dbjr.com.cn/article/184386.htm

到此這篇關(guān)于BeautifulSoup獲取指定class樣式的div的實現(xiàn)的文章就介紹到這了,更多相關(guān)BeautifulSoup獲取class樣式的div內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于django 數(shù)據(jù)庫遷移(migrate)應(yīng)該知道的一些事

    關(guān)于django 數(shù)據(jù)庫遷移(migrate)應(yīng)該知道的一些事

    今天小編就為大家分享一篇關(guān)于django 數(shù)據(jù)庫遷移(migrate)應(yīng)該知道的一些事,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 用Python?Turtle畫棵櫻花樹送給自己

    用Python?Turtle畫棵櫻花樹送給自己

    心情不好的時候,來用Python和Turtle庫畫棵櫻花樹送給自己吧,自己也要好好愛自己才對!文中的示例代碼講解詳細,感興趣的小伙伴可以動手試一試
    2022-02-02
  • Python實現(xiàn)標(biāo)記數(shù)組的連通域

    Python實現(xiàn)標(biāo)記數(shù)組的連通域

    這篇文章主要為大家詳細介紹了如何通過Python實現(xiàn)標(biāo)記數(shù)組的連通域,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2023-04-04
  • Python基礎(chǔ)異常處理梳理總結(jié)

    Python基礎(chǔ)異常處理梳理總結(jié)

    這篇文章主要介紹了Python基礎(chǔ)異常處理梳理總結(jié),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Python __slots__的使用方法

    Python __slots__的使用方法

    這篇文章主要介紹了Python __slots__的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python KNN算法實現(xiàn)鳶尾花數(shù)據(jù)集分類

    python KNN算法實現(xiàn)鳶尾花數(shù)據(jù)集分類

    這篇文章主要介紹了python KNN算法實現(xiàn)鳶尾花數(shù)據(jù)集分類,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 用Python解決x的n次方問題

    用Python解決x的n次方問題

    今天小編就為大家分享一篇用Python解決x的n次方問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python淺析迭代器Iterator的使用

    Python淺析迭代器Iterator的使用

    這篇文章主要介紹了Python?迭代器Iterator詳情,迭代器可以幫助我們解決面對復(fù)雜的數(shù)據(jù)場景時,快速簡便的獲取數(shù)據(jù),下文關(guān)于其詳細介紹,需要的小伙伴可以參考一下
    2022-07-07
  • python?yield迭代器詳解

    python?yield迭代器詳解

    帶有yield的函數(shù)在Python中被稱之為generator(生成器),也就是說,當(dāng)你調(diào)用這個函數(shù)的時候,函數(shù)內(nèi)部的代碼并不立即執(zhí)行?,這個函數(shù)只是返回一個生成器
    2022-11-11
  • Python中os.path.join函數(shù)的用法示例詳解

    Python中os.path.join函數(shù)的用法示例詳解

    這篇文章主要給大家介紹了關(guān)于Python中os.path.join函數(shù)用法的相關(guān)資料,os.path.join函數(shù)是Python標(biāo)準(zhǔn)庫中的一個函數(shù),用于將多個路徑組合成一個有效的路徑,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10

最新評論