日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫五 Beautifulsoup模块详细

發布時間:2025/6/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫五 Beautifulsoup模块详细 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、基本使用

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)#獲取表的內容 print(soup.head.title.string)#嵌套選擇 print(soup.body.a.string)#嵌套選擇
print(soup.p.contents) #p下所有子節點
print(soup.p.children) #得到一個迭代器,包含p下所有子節點
print(soup.p.descendants) #獲取子孫節點,p下所有的標簽都會選擇出來
print(soup.a.parent) #獲取a標簽的父節點
print(soup.a.parents) #找到a標簽所有的祖先節點,父親的父親,父親的父親的父親.
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、按照文本內容查找 print(soup.p.find_all(text="The Dormouse's story")) # 按照完整內容匹配(是==而不是in),得到的結果也是內容

4、按正則表達式查找
soup.findAll(re.compile('^b'))#默認已導入re本語句會查找所有b開頭的標簽,例如:body,b 5、按照列表查找
soup.findAll(['p','title'])#傳入列表時,BeautifulSoup會將所有與列表中任一匹配的元素返回。

4、find和find_all的異同
  1、find()相當于find_all()中limit=1的時候,而.limit參數是用于限制返回搜索的結果數,當搜索的達到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)#傳入多個參數,找出同時滿足兩個條件的tag
  soup.find_all(class_='myclass')#找出class值為myclass的tag,注意下劃線不能少
   soup.findAll(attrs={'class':'myclass','id'='box'})#特殊的參數可以定義字典參數來查找。查找多個參數時,也可以用此方法

    如果一個指定名字的參數不是搜索內置的參數名,搜索時會把該參數當作指定名字tag的屬性來搜索,
    如果包含一個名字為 id 的參數,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())# 獲取內容
soup.select('.myclass #box')#后代查找 soup.select('head>title')#子查找 soup.select('div+p')#相鄰兄弟查找 soup.select('div~p’)#后續兄弟查找
soup.select('.myclass a[id="box"]') #同時還可以加入屬性查找。

select()方法返回的是列表形式。 ? ?

轉載于:https://www.cnblogs.com/xuanan/p/7810305.html

總結

以上是生活随笔為你收集整理的爬虫五 Beautifulsoup模块详细的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。