1.Beautiful Soup
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello</p>','lxml')//倒入需要解析的文件字符串
print(soup.p.string)
打印的結果是Hello
節(jié)點選擇器
soup.title/p/head
獲取P標簽內容
標準格式輸出頁面
soup.prettify()
獲取屬性內容
soup.title.name #獲取到的為標簽名稱拥褂,比如這個結果是title
獲取屬性
soup.p['name']
此方式獲取的是p標簽中name屬性的值似将,比如要獲取src的值,就把name改為src
嵌套選擇
soup.head.title
表示獲取head節(jié)點中的title節(jié)點
關聯(lián)選擇
1 子節(jié)點和子孫節(jié)點
soup.p.contents #獲取到的是p標簽的子節(jié)點所有內容
如果要單獨獲取每一個子節(jié)點數(shù)據(jù)
for i,child in enumerate(soup.p.children)
printable(i,child)
會打印出所有子節(jié)點數(shù)據(jù)
2.父節(jié)點
soup.p.parents
3.兄弟節(jié)點
soup.p.next_siblings 下一個兄弟節(jié)點
soup.p.previous_siblings 上一個兄弟節(jié)點
方法選擇器
find_all(name,attrs,recursive,text,**kwargs)
例如
1. soup.find_all(name='ul')
得到的是所有標簽名字為ul的標簽數(shù)據(jù)
soup.find_all(name='li')
得到的是所有標簽名字為li的標簽數(shù)據(jù)
2.attrs 根據(jù)屬性查詢結果
soup.find_all(attrs={'id':'list-1'})//查詢id為list-1的節(jié)點羞海,此處會打印所有子節(jié)點
soup.find_all(attrs={'name':'elements'})//查詢name為elements的節(jié)點,此處會打印所有子節(jié)點
對于一些常用的屬性,比如id和class艇棕,可以不用attrs
例如
soup.find_all(id='list-1')
soup.find_all(class_='element')//由于class在python是一個關鍵字拄显,所以需要加上下劃線
3. text 根據(jù)文本匹配
soup.find_all(text=re.compile('link'))
匹配所有文字包含link的信息,此處不是節(jié)點贡避,是直接匹配節(jié)點的文字
<a>hello,this is a link</a>
結果為hello予弧,this is a link
4,兄弟節(jié)點刮吧,父節(jié)點匹配
find_parents()和find_parent()前者返回祖先節(jié)點,后者返回父節(jié)點
find_next_siblings()和find_next_sibling()掖蛤,前者返回所有下一個兄弟節(jié)點杀捻,后者返回第一個上一個兄弟節(jié)點
find_all_next()和find_next()其職能和返回節(jié)點后所有符合條件的節(jié)點,后者返回第一個符合條件的節(jié)點
CSS選擇器
soup.select('.panel .panel-heading') 獲取class panel 標簽下的 panel-heading class標簽
soup.elect('ul li') ul li標簽
soup.select('#list-2 .element') id為list -2 下 class 為element標簽
soup.select('ul')[0] ul標簽下地0個標簽
同樣支持嵌套選擇
獲取屬性和之前類似
soup.select('.panel')[0]['src']