BS4のデータ抽出
beautifulsoupサポートパーサ
-
パーザー 使用 優位 恵まれません Pythonの標準ライブラリ BeautifulSoup(markup, "html.parser")
内蔵中等度の強度の文書のフォールトトレランスの標準Pythonライブラリの実行速度 文書のフォールトトレランスが悪い前のPython 2.7.3または3.2.2のバージョン) lxmlのHTMLパーサ BeautifulSoup(markup, "lxml")
強力なスピード文書のフォールトトレランス あなたは、C言語のライブラリをインストールする必要があります lxmlのXMLパーサ BeautifulSoup(markup, ["lxml-xml"])``BeautifulSoup(markup, "xml")
速いだけXMLパーサをサポート あなたは、C言語のライブラリをインストールする必要があります html5lib BeautifulSoup(markup, "html5lib")
ブラウザがHTML5の文書形式の文書の生成を解析する方法に最高のフォールトトレランス 遅い外部拡張に依存しません BS4よく使用されるオブジェクト:
1:tag 对象与XML或HTML原生文档中的tag相同 ---tag的属性操作方法与字典一样 2:NavigatableString:用来包装tag中的字符串 3:BeautifulSoup 4:Comment
基本的な使い方
from bs4 import BeautifulSoup soup=BeautifulSoup(html,'lxml') #首先解析为Unicode文档,然后BS会选择最合适的解析器来解析这段文档,这里是指定lxml解析 print(soup.prettify()) #把要解析的字符串以标准的格式输出
ノードセレクタ:ノードの単一階層は、それが使用することをお勧めします、非常に明確です
1:获取名称--name获取title的节点名称 soup.title.name 2-1:获取属性的值 soup.p.attres #获取p节点的所有属性值 soup.p.attrs['title'] #获取title的属性值 2-2:[]直接获取属性的值 soup.p["name"] soup.p["title"] 3:获取节点的文本内容 string soup.p.string 4:嵌套选择---由于html文档的嵌套,bs4.element.Tag可以继续调用节点进行选择 soup.head.title.string #输出title的文本内容 5:关联选择 子节点: 选取节点p之后,获取它的直接子节点---返回一个列表["文本","子节点"]--不会单独列出子孙节点 soup.p.contents soup.p.children #返回一个生成器,遍历输出结果 子孙节点: soup.p.descendants #返回一个生成器,遍历输出结果 父节点:parent 祖先节点:parents
- メソッドのセレクタ
find_(name,attes,recursive,text,**kwargs):查询所有符合条件的元素,传入一些属性或文本 1:name根据节点名查找元素--返回一个列表 soup.find_all(name="a") soup.find_all('a') 2:attrs根据一些属性来查询 soup.find_all('a',id="test",class_="test") #注意class_ href=soup.a.attrs['href'] soup.find_all(attrs={'class':'test'}) 3:text参数可用来匹配节点的文本,传入的形式可以使str和正则表达式 soup.find_all(text=re.compile('link-1.html'))
CSSセレクタ
CSS选择器需要调用select()方法 soup.select('.panel .panel-heading') #class soup.select('#list-2 .element') # #-id soup.select('ul li') #普通标签:选择所有ul节点下的所有li节点 获取属性 遍历列表之后,Tag类型 ul['id'] ul.attrs['id'] 获取文本:get_text() for li in soup.select('li'): print("Get Text:",li.get_text()) print("String:",li.string)
注意点:
## string和strings、stripped_strings属性以及get_text方法: 1. string:获取某个标签下的字符串[1个]。返回来的是个字符串。 2. strings:tag中包含【多个】字符串,子孙字符串。返回来的是个生成器。 2. stripped_strings:输出的字符串中可能包含了很多空格或空行。返回来的是个生成器。 4. get_text():获取某个标签下的所有字符串内容。以普通字符串返回。