Python 网络爬虫笔记4 -- 信息标记与提取

版权声明: https://blog.csdn.net/Wang_Jiankun/article/details/83754442

Python 网络爬虫笔记4 – 信息标记与提取


Python 网络爬虫系列笔记是笔者在学习嵩天老师的《Python网络爬虫与信息提取》课程及笔者实践网络爬虫的笔记。

课程链接:Python网络爬虫与信息提取
参考文档:
Requests 官方文档(英文)
Requests 官方文档(中文)
Beautiful Soup 官方文档
re 官方文档
Scrapy 官方文档(英文)
Scrapy 官方文档(中文)


一、信息标记


1、XML:标签

  • 标签格式:< 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>

2、JSON:有类型的键值对key:value

  • 键值对单个值:“key” : “value”
  • 键值对多个值:“key” : [“value1”, “value2”]
  • 嵌套键值对:“key” : {“subkey” : “subvalue”}
{
“firstName” : “Tian” ,
“lastName” : “Song” ,
“address” : {
			“streetAddr” : “中关村南大街5号” ,
			“city” : “北京市” ,
			“zipcode” : “100081”
			} ,
“prof” : [ “Computer System” , “Security” ]
}

3、YAML:无类型键值对key:value

  • 键值对单个值:key : value
  • 键值对多个值:
    key : #Comment
    ‐value1
    ‐value2
  • 嵌套键值对:
    key :
    subkey : subvalue
firstName : Tian
lastName : Song
address :
	streetAddr : 中关村南大街5号
	city : 北京市
	zipcode : 100081
prof :
‐Computer System
‐Security

二、信息提取


1、信息提取一般方法

形式解析: 完整解析信息的标记形式,再提取关键信息
  优点:信息解析准确
  缺点:提取过程繁琐,速度慢

搜索: 无视标记形式,直接搜索关键信息
  优点:提取过程简洁,速度较快
  缺点:提取结果准确性与信息内容相关

融合方法: 结合形式解析与搜索方法,提取关键信息


2、基础查找方法:find_all

函数原型:

find_all(name, attrs, recursive, string, **kwargs)

参数:

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

返回: 检索结果的列表

实例:

import requests
from bs4 import BeautifulSoup

def html_search():
    """
    检索 HTML 内容,提取信息
    :return:
    """
    html = requests.get('https://python123.io/ws/demo.html')
    soup = BeautifulSoup(html.text, 'html.parser')

    # 检索标签
    print(soup.find_all('a'))
    print(soup.find_all(['a', 'b']))

    # 检索标签属性
    print(soup.find_all('p', 'course'))
    print(soup.find_all(id='link1'))

    # 检索字符串
    print(soup.find_all(string='python'))

if __name__ == '__main__':
    print('running bs:')
    html_search()

简写:

  • < tag>(…) 等价于 < tag>.find_all(…)
  • soup(…) 等价于 soup.find_all(…)

3、其它查找方法

方法 说明
<>.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()参数

猜你喜欢

转载自blog.csdn.net/Wang_Jiankun/article/details/83754442