BeautifulSoup獲取指定class樣式的div的實現(xiàn)
如何獲取指定的標(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)文章希望大家以后多多支持腳本之家!
- python BeautifulSoup使用方法詳解
- Python BeautifulSoup中文亂碼問題的2種解決方法
- python 解析html之BeautifulSoup
- python基于BeautifulSoup實現(xiàn)抓取網(wǎng)頁指定內(nèi)容的方法
- Python使用BeautifulSoup庫解析HTML基本使用教程
- python利用beautifulSoup實現(xiàn)爬蟲
- python中bs4.BeautifulSoup的基本用法
- python3第三方爬蟲庫BeautifulSoup4安裝教程
- python爬蟲之BeautifulSoup 使用select方法詳解
- Python爬蟲beautifulsoup4常用的解析方法總結(jié)
相關(guān)文章
關(guān)于django 數(shù)據(jù)庫遷移(migrate)應(yīng)該知道的一些事
今天小編就為大家分享一篇關(guān)于django 數(shù)據(jù)庫遷移(migrate)應(yīng)該知道的一些事,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python實現(xiàn)標(biāo)記數(shù)組的連通域
這篇文章主要為大家詳細介紹了如何通過Python實現(xiàn)標(biāo)記數(shù)組的連通域,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下2023-04-04python KNN算法實現(xiàn)鳶尾花數(shù)據(jù)集分類
這篇文章主要介紹了python KNN算法實現(xiàn)鳶尾花數(shù)據(jù)集分類,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Python中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