標籤:style blog color 使用 io ar div html
因工作需要,日常工作中有不少時間是用在了反覆登陸內網。
故詳細研究測試了BeautifulSoup的用法,總結下來備用耙梳頁之需。
首先是匯入模組並初始化了:
from bs4 import BeautifulSoupsoup=BeautifulSoup(opener)
#1、tag標籤法
如果一層層的標籤包下去,只取每層標籤第一個,或只有唯一一個時,可以用
soup.head.title
但並行多個同名標籤的則不能title[2]之類尋找
#2、contents法
根據文檔樹進行搜尋,返回標記對象(tag)的列表,注意,直接.contents,返回的是列表,不是單一元素
使用contents向後遍曆樹,使用parent向前遍曆樹
共兩種用法:
soup.contentssoup.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]=‘/‘