Python之BeautifulSoup常用詳細使用


因工作需要,日常工作中有不少時間是用在了反復登陸內網。

故詳細研究測試了BeautifulSoup的用法,總結下來備用爬網頁之需。

首先是導入模塊並初始化了:

 
from bs4 import BeautifulSoup
soup=BeautifulSoup(opener)

#1、tag標簽法
如果一層層的標簽包下去,只取每層標簽第一個,或只有唯一一個時,可以用

soup.head.title


但並行多個同名標簽的則不能title[2]之類查找

#2、contents法
根據文檔樹進行搜索,返回標記對象(tag)的列表,注意,直接.contents,返回的是列表,不是單一元素
使用contents向后遍歷樹,使用parent向前遍歷樹

共兩種用法:

soup.contents

soup.contents[x].contents


返回值是包含html標簽全部內容的列表。比如可能是三元素:[u'\n','<html>xxxx</html>',u'\n']
soup.contents[x]則是對列表各元素值的獲取了

soup.contents[x].contents


返回值是目標標簽的下一層(即為該標簽為父,則抓取到的都是子的列表)全部標簽的列表。這里如果x取錯,可能會導致
錯誤,因為取錯則生不成列表,后面contents會彈錯。

1 soup.contents[1]=u'HTML'

2 soup.contents[2]=u'\n'

3 soup.contents[3]=<html>...</html> 

soup.contents[3].contents=[u'\n',<head>...</head>,u'\n',<body>...</body>,u'\n']


以此類推,soup.contents[3].contents[3]=肯定是上述列表中的第四個元素body。

#3、.next法
只能針對單一元素進行.next,或者說是對contents列表元素的挨個清點。
比如

soup.contents[1]=u'HTML'
soup.contents[2]=u'\n'

則soup.contents[1].next等價於soup.contents[2]

#搜索法

find(name=None, attrs={}, recursive=True, text=None, **kwargs)

主要2個:.find('p'),.findAll('p')
find返回的是字符串值,而且是返回從頭查找到的第一個tag對。但是如果這第一個tag對包括大量的內容,父等級很高,則同時其內部所包含的

此級標簽也全部都find

findAll返回值是個列表,如果發現了一個同名標簽內含多個同名標簽,則內部的標簽一並歸於該父標簽顯示,列表其他元素也不再體現那些內含

的同名子標簽。
比如:

soup.findAll(onclick='document.location...')
    soup.findAll(attrs={'style':r'outline:none;'}) #用來查找屬性中有style='outline:none;的標簽體。


#4、.attrs[x]獲取屬性值法
在上述各種方法找到唯一的標簽體之后,可以通過對標簽實施attrs,得到一個內部屬性的列表。
在標簽后面新增.attrs['id']等等即可取得該標簽內部id的屬性值
比如:

soup.contents[3]==<meta abc='god' href='/'>
soup.contents[3].attrs=={'abc':'god','href':'/'}
soup.contents[3].attrs[1]='/'

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM