信息标记的三种形式:点击链接了解详情
XML:<name></name;,<name />;<!-- -->
Json:”key”:”value”;”key”:[“value1”,”value2”,...];”key”:{“subkey”:”subvalue”,...,...}
Yaml:key:value
Key:#comment(注释)
-value1
-value2(平行关系)
Key:
Subkey:subvalue
信息提取的一般方法:
- 完整解析信息的标记形式,在提取关键信息;准确但是繁琐
- 无视信息标记,直接提取关键信息;快速但是准确性差
- 融合方法,结合形势解析和搜索
import requests
from bs4 import BeautifulSoup
r = requests.get("http://python123.io/ws/demo.html")
r.text
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
#信息提取,提取HTML文本中所有的URL
for link in soup.find_all('a'):
print(link.get('href'))
基于bs4库的HTML内容查找方法
<>.find_all(name,attrs,recursive,string,**kwargs):返回一个列表类型,存储查找结果
<tag>(..)等价于<tag>.find_all(..);soup(..)等价于soup .find_all(..)
七个扩展方法:
<>.find():搜索且只返回一个结果,字符串类型,同.find_all()参数
<>.find.parents():在先辈节点中搜索,返回列表类型,同.find_all参数
<>.find.parent():在先辈节点中返回一个结果,字符串类型,同.find_all()参数
<>.find_next_siblings():在后续平行节点中搜索,返回列表类型,同.find_all()参数
<>.find.next_sibling ():在后续平行节点中返回一个结果,字符串类型,同.find_all()参数
<>.find_previous_siblings():在前序平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_previous_sibling():在前序平行节点中返回一个结果,字符串类型,同.find_all()参数
import requests from bs4 import BeautifulSoup import re r = requests.get("http://python123.io/ws/demo.html") r.text demo = r.text soup = BeautifulSoup(demo,"html.parser") #html内容查找 fa = soup.find_all('a') #查找所有的a标签,以列表的形式存储 fab = soup.find_all(['a','b']) for tag in soup.find_all(True): #查下找 所有存在的标签 print(tag.name) for tag in soup.find_all(re.compile('b')): #查找所有以b开头的标签,使用正则表达式 print(tag.name) fbc = soup.find_all('p','course') #查找所有含有course属性值的p标签 fi1 = soup.find_all(id = 'link1') #查找id是link1的标签元素 fas = soup.find_all('a',recursive=False) #从a标签儿子节点层面开始搜索标签,此处为空 fs = soup.find_all(string = "Basic python") #检索当前标签下指定字符串信息 fsp = soup.find_all(string = re.compile("python")) #检索当前标签下所有包含python的字符串域