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的元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/597829.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言函数实现冒泡排序

前言 今天我们来看看怎么使用函数的方式实现冒泡排序吧&#xff0c;我们以一个数组为例arr[] {9,8,7,6,5,4,3,2,1,0},我们将这个数组通过冒泡排序的方式让他变为升序吧。 代码实现 #include<stdio.h> void bubble_sort(int arr[], int sz) {int i 0;for (i 0;i < s…

静态住宅IP代理的作用:提升跨境电商海外收款系统的稳定性

跨境电商正是当下电子商务的热门领域&#xff0c;充斥着发展机遇。然而&#xff0c;跨境电商面临着收款系统不稳定的问题&#xff0c;这直接影响到了商家的资金流动和运营效率。而高匿住宅静态IP的运用可以有效提升跨境电商海外收款系统的稳定性&#xff0c;让我们一起来看看其…

小秦网站部署上线

叮&#xff5e;您有一份消息&#xff0c;请注意查收&#xff01; 小秦个人网站终于上线了&#xff1a; 网站主要有&#xff1a;免费听歌、看小姐姐、AI女友、留言板等功能&#xff0c;建议收藏、收藏、再收藏、重要事情说三遍&#xff01;&#xff01;&#xff01; 网站&#x…

OCP Java17 SE Developers 复习题11

答案 A, C, D, E. A method that declares an exception isnt required to throw one, making option A correct. Unchecked exceptions can be thrown in any method, making options C and E correct. Option D matches the exception type declared, so its also correct…

隐私保护和带宽有效的联邦学习:在医院死亡率预测中的应用-文章翻译

隐私保护和带宽有效的联邦学习:在医院死亡率预测中的应用 摘要 机器学习,特别是联邦机器学习,在医学研究和患者护理方面开辟了新的视角。尽管联邦机器学习在隐私方面比集中式机器学习有所改进,但它不提供可证明的隐私保证。此外,联邦机器学习在带宽消耗方面相当昂贵,因…

【Easy云盘 | 第三篇】登录注册模块上篇(获取验证码、发送邮箱验证码、登录、注册、重置密码)基于AOP实现参数校验

文章目录 4.2登录注册模块设计4.2.1获取验证码&#xff08;1&#xff09;思路&#xff08;2&#xff09;接口&#xff08;3&#xff09;controller层&#xff08;4&#xff09;CreateImageCodeUtils工具类&#xff08;5&#xff09;测试结果 4.2.2发送邮箱验证码&#xff08;1&…

leetcode热题100.跳跃游戏2

Problem: 45. 跳跃游戏 II 文章目录 题目思路复杂度Code 题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: …

Hadoop MapReduce

MapReduce分为两个阶段&#xff0c;分为Map阶段和Reduce阶段&#xff0c;可以自定义map函数和reduce函数&#xff0c; map函数的输入是行在文件的字节偏移量&#xff0c;value是文件的一行数据。 reduce函数的输入是key和对应key的value组&#xff0c;然后reduce函数可以对这…

FebHost:墨西哥外贸独立站为何钟情于.MX域名?

在数字化时代的大潮中&#xff0c;墨西哥的互联网用户对于 .mx 域名展现出了浓厚的兴趣。这一现象背后的原因引发了广泛的关注。 首先&#xff0c;本地相关性无疑是 .mx 域名吸引墨西哥用户的重要因素。当用户在网络世界中漫游时&#xff0c;一个带有 .mx 域名的网站往往能迅速…

DSO9254A安捷伦DSO9254A示波器

181/2461/8938产品概述&#xff1a; 安捷伦DSO9254A的带宽为2.5 GHz&#xff0c;配备15英寸XGA液晶显示屏&#xff0c;采用静音封装&#xff0c;厚度仅为9英寸&#xff08;23厘米&#xff09;&#xff0c;重量仅为26磅&#xff08;11.8千克&#xff09;。DSO9254A集成了一个功…

MongoDB初探:安装与图形化界面保姆级使用指南

文章目录 前言一、MongoDB下载安装下载解压配置环境变量打开mongoDB 二、配置本地MongoDB服务创建文件下载服务测试服务 三、图形化界面Compass GUINavicat GUI 总结 前言 MongoDB是一种流行的开源、面向文档的NoSQL数据库程序。与传统的关系型数据库不同&#xff0c;MongoDB将…

观《你想活出怎样的人生》有感

《你想活出怎样的人生》 四月六号&#xff0c;和赵茜小美女观看了宫崎骏导演拍的《你想活出怎样的人生》&#xff0c;感受颇丰&#xff0c;特此写一篇文章以记之。 电影简介 《你想活出怎样的人生》是宫崎骏执导的动画电影&#xff0c;不仅是宫崎骏的复出之作&#xff0c;也…