爬虫五 Beautifulsoup模块详细
生活随笔
收集整理的這篇文章主要介紹了
爬虫五 Beautifulsoup模块详细
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、基本使用
from bs4 import BeautifulSoup
htmlCharset = "GB2312"
soup=BeautifulSoup(html_doc,'lxml', fromEncoding=htmlCharset) #具有容錯功能,指定編碼
res=soup.prettify() #處理好縮進,結構化顯示
?
一、標簽選擇器
print(soup.p) #存在多個相同的標簽則只返回第一個 print(soup.a) #存在多個相同的標簽則只返回第一個 print(soup.p.name)#獲取標簽的名稱 print(soup.p.attrs)#獲取標簽的屬性 print(soup.p.string)#獲取表的內(nèi)容 print(soup.head.title.string)#嵌套選擇 print(soup.body.a.string)#嵌套選擇print(soup.p.contents) #p下所有子節(jié)點
print(soup.p.children) #得到一個迭代器,包含p下所有子節(jié)點
print(soup.p.descendants) #獲取子孫節(jié)點,p下所有的標簽都會選擇出來
print(soup.a.parent) #獲取a標簽的父節(jié)點
print(soup.a.parents) #找到a標簽所有的祖先節(jié)點,父親的父親,父親的父親的父親.
print(soup.a.next_siblings) #得到生成器對象,獲取標簽下面的兄弟
print(soup.a.previous_siblings) #得到生成器對象獲取標簽前面的兄弟
?二、標準選擇器
格式:find_all(name,attrs,recursive,text,**kwargs) 即find_all(標簽名稱,標簽屬性,嵌套查找,文本查找,**kwargs)
1、按照標簽名查找 print(soup.find_all('a',id='link3',attrs={'class':"sister"})) print(soup.find_all('a')[0].find('span')) #嵌套查找#2、按照屬性查找 # print(soup.p.find_all(attrs={'id':'link1'})) #等同于print(soup.find_all(id='link1')) # print(soup.p.find_all(attrs={'class':'sister'})) # print(soup.find_all(class_='sister'))#3、按照文本內(nèi)容查找 print(soup.p.find_all(text="The Dormouse's story")) # 按照完整內(nèi)容匹配(是==而不是in),得到的結果也是內(nèi)容4、按正則表達式查找
soup.findAll(re.compile('^b'))#默認已導入re本語句會查找所有b開頭的標簽,例如:body,b 5、按照列表查找
soup.findAll(['p','title'])#傳入列表時,BeautifulSoup會將所有與列表中任一匹配的元素返回。
4、find和find_all的異同
1、find()相當于find_all()中l(wèi)imit=1的時候,而.limit參數(shù)是用于限制返回搜索的結果數(shù),當搜索的達到limit限制時,就停止搜索返回搜索結果。
2、find()返回的是結果,find_all()返回的是一個列表
3、兩者的使用格式都相同
總結:
soup.find_all(href=re.compile('baidu'))#href包含‘href’的tag
soup.find_all(href=re.compile('baidu'),id='box1)#傳入多個參數(shù),找出同時滿足兩個條件的tag
soup.find_all(class_='myclass')#找出class值為myclass的tag,注意下劃線不能少
soup.findAll(attrs={'class':'myclass','id'='box'})#特殊的參數(shù)可以定義字典參數(shù)來查找。查找多個參數(shù)時,也可以用此方法
如果一個指定名字的參數(shù)不是搜索內(nèi)置的參數(shù)名,搜索時會把該參數(shù)當作指定名字tag的屬性來搜索,
如果包含一個名字為 id 的參數(shù),Beautiful Soup會搜索每個tag的”id”屬性。
?? 當想用class的時候,由于class是python的關鍵詞,不能直接用,可以用class_代替class
五 CSS選擇器
1、CSS選擇器
print(soup.p.select('.sister')) # print(soup.select('.sister span')) print(soup.select('#link1')) print(soup.select('#link1 span')) print(soup.select('#list-2 .element.xxx')) print(soup.select('#list-2')[0].select('.element')) #可以一直select,但其實沒必要,一條select就可以了,嵌套查找 print(soup.select('#list-2 h1')[0].attrs)# 獲取屬性 print(soup.select('#list-2 h1')[0].get_text())# 獲取內(nèi)容soup.select('.myclass #box')#后代查找 soup.select('head>title')#子查找 soup.select('div+p')#相鄰兄弟查找 soup.select('div~p’)#后續(xù)兄弟查找
soup.select('.myclass a[id="box"]') #同時還可以加入屬性查找。
select()方法返回的是列表形式。 ? ?
轉載于:https://www.cnblogs.com/xuanan/p/7810305.html
總結
以上是生活随笔為你收集整理的爬虫五 Beautifulsoup模块详细的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS作用域与闭包
- 下一篇: oracle操作字符串:拼接、替换、截取