Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析)

2024-04-07 19:44

本文主要是介绍Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

正则表达式实战-腾讯新闻

需求: 使用正则获取腾讯新闻标题内容

网站:https://sports.qq.com/

代码:

import reimport requests
from fake_useragent import UserAgenturl = 'https://sports.qq.com/'
# 构建请求头信息
headers = {'User-Agent':UserAgent().chrome}
# 发送请求
resp = requests.get(url,headers=headers)
# 设置字符集
resp.encoding ='gbk'
# # 保存数据
# with open('tmp.html','w',encoding='utf-8')
as f:
#     f.write(resp.text)
# 匹配数据
rs =  re.findall(r'<li><a target="_blank"
href=".+>(.+)</a></li>',resp.text)
# re.findall(r'<li><a target="_blank"
href=".+?>(.+)</a>',resp.text)for r in rs:print(r)

数据解析-Beautiful Soup的使用 

简介:

        Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。

它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可

以写出一个完整的应用程序。

        Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。不需要考虑

编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。

然后,仅仅需要说明一下原始编码方式就可以了Beautiful Soup已成为和lxml、html6lib一样出色的

python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

官网http://beautifulsoup.readthedocs.io/zh_CN/latest/

Beautiful Soup 安装

pip install beautifulsoup4
pip install bs4

         Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不

安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装。

pip install lxml

解析器 使用方法优势 劣势
Python标准库BeautifulSoup(markup,“html.parser”)1. Python的内置标准库 2. 执行
速度适中 3.文档容错能力强
Python 2.7.3 or
3.2.2)前 的版本中文
档容错能力差
lxml HTML解析器BeautifulSoup(markup,“lxml”)1. 速度快 2.文档容错能力强 需要安装C语言库
lxml XML 解析器BeautifulSoup(markup,[“lxml”, “xml”])
BeautifulSoup(markup,“xml”)
1. 速度快 2.唯一支持XML的解析
器 3.需要安装C语言库
html5libBeautifulSoup(markup,“html5lib”)1. 最好的容错性 2.以浏览器的方
式解析文档 3.生成HTML5格式的
文档 4.速度慢
不依赖外部扩展
 创建 Beautiful Soup 对象
from bs4 import BeautifulSoupbs = BeautifulSoup(html,"lxml")

三大对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每
个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • NavigableString
  • Comment 

案例代码

<title>尚学堂</title>
<div class='info' float='left'>Welcome to
SXT</div>
<div class='info' float='right'><span>Good Good Study</span><a href='www.bjsxt.cn'></a><strong><!--没用--></strong>
</div>

Tag

通俗点讲就是 HTML 中的一个个标签
例如: <div> <title>

#以lxml方式解析
soup = BeautifulSoup(info, 'lxml')
print(soup.title)
# <title>尚学堂</title>

注意:

相同的标签只能获取第一个符合要求的标签

获取属性 :

#获取所有属性
print(soup.title.attrs)
#class='info' float='left'#获取单个属性的值
print(soup.div.get('class'))
print(soup.div['class'])
print(soup.a['href'])
#info

NavigableString获取内容 

print(soup.title.string)
print(soup.title.text)
#尚学堂

Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其实
输出的内容仍然不包括注释符号,但是如果不好好处理它,可
能会对我们的文本处理造成意想不到的麻烦

if type(soup.strong.string) == Comment:print(soup.strong.prettify())
else:print(soup.strong.string)

数据解析-Beautiful Soup方法的使用 

find_all() 搜索文档树

        Beautiful Soup定义了很多搜索方法,这里着重介绍find_all() 其它方法的参数和用法类似

字符串

        传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容

#返回所有的div标签
print(soup.find_all('div'))

正则表达式 

        传入正则表达式作为参数,Beautiful Soup会通过正则表达式的match() 来匹配内容

#返回所有的div标签
print (soup.find_all(re.compile("^div")))

列表

        传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回

#返回所有匹配到的span a标签
print(soup.find_all(['span','a']))

keyword

        传入一个id 的参数,Beautiful Soup会搜索每个tag的”id”属性

#返回id为welcom的标签
print(soup.find_all(id='welcome'))

True

        True 可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点

按CSS搜索

        传入一个css,通过 class_ 参数搜索有指定CSS类名的tag

# 返回class等于info的div
print(soup.find_all('div',class_='info'))

按属性的搜索
soup.find_all("div", attrs={"class": "info"})

CSS选择器 

soup.select(参数)

表        达        式说        明
tag选择指定标签
*选择所有节点
#id选择id为container的节点
.class选取所有class包含container的节点
li a选取所有li下的所有a节点
ul + p(兄弟)选择ul后面的第一个p元素
div#id > ul (父子)选取id为id的div的第一个ul子元素
table ~ div选取与table相邻的所有div元素
a[title]选取所有有title属性的a元素
a[class=”title”]选取所有class属性为title值的a
a[href*=”sxt”] sxt的a元素选取所有href属性包含
a[href^=”http”]选取所有href属性值以http开头的a元素
a[href$=”.png”]选取所有href属性值以.png结尾的a元素
input[type="redio"]:checked选取选中的hobby的元素

这篇关于Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883496

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand