(三)文本标记与提取方法 | python爬虫实战

文本标记

文本标记的三种形式

  • XML(eXtensible Markup Language)
<name></name>
<name />
<!‐‐ ‐‐>

实例:
<person>
<firstName>Tian</firstName>
<lastName>Song</lastName>
<address>
<streetAddr>中关村南大街5号</streetAddr>
<city>北京市</city>
<zipcode>100081</zipcode>
</address>
<prof>Computer System</prof><prof>Security</prof>
</person>
  • JSON(JavaScript Object Notation)
“key” : “value”
“key” : [“value1”, “value2”]
“key” : {“subkey” : “subvalue”}

实例:
{
“firstName” : “Tian” ,
“lastName” : “Song” ,
“address” : {
“streetAddr” : “中关村南大街5号” ,
“city” : “北京市” ,
“zipcode” :100081} ,
“prof” : [ “Computer System” , “Security” ] }
  • YARM(YAML Ain’t Markup Language)
key : value
key : #Comment
‐value1
‐value2
key :
	subkey : subvalue

实例:
firstName : Tian
lastName : Song
address :
streetAddr : 中关村南大街5号
city : 北京市
zipcode : 100081
prof : ‐Computer System
‐Security

三种信息标记形式的比较

形式特点比较
XML最早的通用信息标记语言,可扩展性好,但繁琐Internet上的信息交互与传递
JSON信息有类型,适合程序处理(js),较XML简洁移动应用云端和节点的信息通信,无注释
YARM信息无类型,文本信息比例最高,可读性好各类系统的配置文件,有注释易读

信息提取

信息提取的一般方法

  • 方法一:完整解析信息的标记形式,再提取关键信息
    xml json yarm
    需要标记解析器,例如:bs4库的标签树遍历
    优点:信息解析准确
    缺点:提取过程繁琐,速度慢

  • 方法二:无视标记形式,直接搜索关键信息
    搜索
    对信息的文本查找函数即可
    优点:提取过程简洁,速度较快
    缺点:提取结果准确与信息内容相关

  • 融合方法:结合形式解析与搜索方法,提取关键信息
    XML JSON YAML 搜索
    需要标记解析器及文本查找函数

基于bs4库的HTML内容查找方法

<>.find_all(name, attrs, recursive, string, **kwargs)

  • name : 对标签名称的检索字符串
  • attrs: 对标签属性值的检索字符串,可标注属性检索
  • recursive: 是否对子孙全部检索,默认True
  • string: <>…</>中字符串区域的检索字符串

扩展方法

方法说明
<>.find()搜索且只返回一个结果,同.find_all()参数
<>.find_parents()在先辈节点中搜索,返回列表类型,同.find_all()参数
<>.find_parent()在先辈节点中返回一个结果,同.find()参数
<>.find_next_siblings()在后续平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_next_sibling()在后续平行节点中返回一个结果,同.find()参数
<>.find_previous_siblings()在前序平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_previous_sibling()在前序平行节点中返回一个结果,同.find()参数

简单实例

import requests
from bs4 import BeautifulSoup

def func(url):
    header = {"user-agent" : "Mozilla/5.0"}
    r = requests.get(url, headers=header)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    soup = BeautifulSoup(r.text, "html.parser")
    for tag in soup.find_all('a'):
        print(tag.string)
    print("------")
    for tag in soup.find_all(True):
        print(tag.name)

if __name__ == "__main__":
    url = "http://www.baidu.com"
    func(url)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值