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.dhdzp.com/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)文章
Pytorch Tensor基本數(shù)學(xué)運算詳解
今天小編就為大家分享一篇Pytorch Tensor基本數(shù)學(xué)運算詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python issubclass 和 isinstance函數(shù)
這篇文章主要介紹了python issubclass 和 isinstance函數(shù),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-07-07
Python+OpenCV實戰(zhàn)之拖拽虛擬方塊的實現(xiàn)
這篇文章主要介紹了如何利用Python+OpenCV實現(xiàn)拖拽虛擬方塊的效果,即根據(jù)手指坐標(biāo)位置和矩形的坐標(biāo)位置,判斷手指點是否在矩形上,如果在則矩形跟隨手指移動,感興趣的可以了解一下2022-08-08

