信息提取的一般方法
- 方法一:完整解析信息的标记形式,再提取关键信息。
- XML JSON YAML
- 需要标记解析器 例如:bs4库的标签树遍历
- 有点:信息解析准确
- 缺点:提取过程繁琐,慢
- 方法二:无视标记形式,直接搜索关键信息
- 搜索
- 对信息的文本查找函数即可。
- 优点:提取过程简洁,速度较快。
- 切刀吗“同期信息准确性与信息内容相关。
- 融合方法:结合形式解析与搜索方法,提取关键信息
- XML JSON YAML 搜索
- 需要标记解析器及文本查找函数。
实例:提取HTML中所有URL连接
- 思路:
- 搜索到所有<a>标签
- 解析<a>标签格式,提取href后的链接内容
from bs4 import BeatifulSoup
soup = BeautifulSoup(demo, "html.parser")
for link in soup.find_all('a'):
print(link.get('href'))
基于BS库的HTML内容查找方法
<>.find_all(name,attrs,recursive,string,**kwargs)
返回一个列表类型,存储查询的结果 name:标签名称
soup.find_all('a')
soup.find_all(['a','b'])
for tag in soup.find_all(True):
print tag.name
正则表达式库
import re # 正则表达式
for tag in soup.find_all(re.compile('b')):
print(tag.name)
attrs:属性值
soup.find_all('p','course')
soup.find_all(id = 'link1')
soup.find_all(id = 'link')
soup.find_all(id=re.compile('link'))
recursive:是否对子孙全部检索,默认True
soup.find_all('a')
soup.find_all('a',recursive=False)
string:<>...</>标签中字符串区域进行检索
soup.find_all(string = "Basic Python")
import re
soup.find_all(string = re.compile("python"))
() 等价于与.findall() soup() 等价于soup.findall()
find_all()扩展方法
- <>.find()
- <>.find_parents()
- <>.find_parent
- <>.findnextsiblings()
- <>.findnextsibling()
- <>.findprevioussiblings()
- <>.findprevioussibling()