比正则表达式慢 解析xml文档
每个标签可基本划分成以下三块
标签(tag)的名字:a,p,div
attr:属性(href,name)
正文 :<a href=url>百度一下</a>中的"百度一下"就是正文
安装BeautifulSoup库
pip install beautifulsoup4
导入
import bs4 #from bs4 import BeautifulSoup
用BeautifulSoup库分析html
1) 将html文档装入一个BeautifulSoup对象X
2) 用X对象的find,find_all等函数去找想要的tag对象
3) 对找到的tag对象,还可以用其find,find_all函数去找它内部包含(嵌套)的tag对象
4) tag对象的text就是该对象里的正文(text),tag对象也可以看作是一个字典,里面包含各种属性(attr)及其值。
1. X.find(name, attrs, recursive, text )
name 查找标签 text 查找文本 attrs 基于attrs参数 只返回第一个匹配到的对象
2.X.find_all(name, attrs, recursive, text, limit, **kwargs)
返回所有匹配到的结果,区别于find(find只返回查找到的第一个结果),可通过for循环遍历每个搜索到的结果。
将html文档装入BeautifulSoup对象
方法1:html文档来自字符串
soup = bs4.BeautifulSoup(str,"html.parser")
print(soup.find("li").text)方法2:html文档来自于文件
soup = bs4.BeautifulSoup(open("c:\\tmp\\test.html","r",encoding="utf-8"),"html.parser")
方法3:html文档来自于给定网址
import requests def getHtml(url): #获得html文本 try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" html = getHtml("https://cn.bing.com/dict/search?q=new") soup = bs4.BeautifulSoup(html,'html.parser')
用BeautifulSoup对象寻找想要的tag
import bs4 soup = bs4.BeautifulSoup(open("c:\\tmp\\test.html",encoding = "utf-8"),"html.parser") diva = soup.find("div",attrs={"id":"synoid"}) #寻找名为"div",且具有 值为"synoid"的属性"id"的tag if diva != None: #如果找到 #通过 find_all() 方法的 attrs 参数定义一个字典参数来搜索包含特殊属性的tag: for x in diva.find_all("span",attrs={"class":"p1-4"}): print(x.text) #在diva内部继续找 for x in diva.find_all("a",attrs={"id":"searchlink1"}): print(x.text) x = diva.find("a",attrs={"id":"searchlink1","class":"sh2"}) if x != None: print(x.text) print(x["href"]) print(x["id"])