北京理工大学-Python网络爬虫与信息提取学习笔记05

信息标记

标记后的信息可形成信息组织结构,增加了信息维度
标记后的信息可用于通信、存储或展示
标记后的信息与信息一样具有重要价值
标记后的信息更有利于程序理解和运行

HTML通过预定义的<>…</>标签形式组织不同类型的信息

信息标记的三种形式
XML
< img src=“china.jpg” size=“10”>…< /img>
< name>…</ name> < name/>

JSON 有类型的键值对
“key”:“value”
“key”:[“value1”,“value2”]
键值对嵌套用{,} “key”:{“key”:“value”,“key”:“value”}

YAML 无类型的键值对
key:value
key:
key:value
key:value
-表达并列关系
key:
-value
-value
|表示整块数据 #表示注释

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

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

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

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

基于bs4库的HTML内容查找方法
<>.find_all(name,attrs,recursive,string,**kwarg) 返回一个列表类型,存储查找的结 果
name:对标签名称的检索字符串
attrs:对标签属性值的检索字符串,可标注属性检索
recursive:是否对子孙全部检索,默认为True
string:<>…</>中字符串区域的检索字符串
**kwarg:

< tag>(…)=< tag>.find_all(…)
soup(…)=soup.find_all(…)

扩展方法
<>.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参 数
提取HTML的url链接

加粗样式

import requests
from bs4 import BeautifulSoup
import re

try:
    r=requests.get('http://python123.io/ws/demo.html')
    r.raise_for_status()
    demo=r.text
    soup=BeautifulSoup(demo,'html.parser')

    for link in soup.find_all('a'):
        print(link.get('href'))

    print(soup.find_all('a'))
    print(soup.find_all(['a','b']))  #既想查找a标签,又想查找b标签

    for tag in soup.find_all(True):  #所有标签名
        print(tag.naem)

    for tag in soup.find_all(re.compile('b')):  #以b开头的所有信息作为查找要素
        print(tag.naem)

    print(soup.find_all('p','course'))   #p标签包含course信息

    print(soup.find_all(id='link1'))
    print(soup.find_all(re.compile('link')))  #以包含link的所有信息作为查找要素

    print(soup.find_all('a',recursive=False))  #不检索子孙节点

    print(soup.find_all(string='Basic Python'))
    print(soup.find_all(string=re.compile('python')))

except:
    print('爬取失败')

ps:学习链接 https://www.icourse163.org/learn/BIT-1001870001?tid=1206951268#/learn/announce

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值