当前位置:网站首页>不用bs4的原因居然是名字太长?爬取彩票开奖信息
不用bs4的原因居然是名字太长?爬取彩票开奖信息
2022-07-30 21:21:00 【及时机芯】
需求分析
昨天,我做了一个爬取彩票预测的程序,其中首次使用到了beautifulsoup4进行数据的解析,和平时最大的区别在于,没有使用xpath解析数据,而是使用了css的选择器。不过没想到的是,昨天却有一位小伙伴说他不喜欢使用beautifulsoup4
他说,“BeautifulSoup的名字太长了,使用起来经常拼错,所以我不喜欢用beautifulsoup4。你为什么不试一试Selector呢?Selector使用起来非常方便,而且还有css选择器,我觉得,这个比bs4更好用“
没想到,beautifulsoup4不受欢迎的原因居然会是,名字太长!看来,这也提醒了我们,平时起名字的时候一定要选择一个简单易读,朗朗上口,容易拼写的名字啊!
另外,在我昨天做了爬取彩票预测的程序以后,有一位喜欢彩票的小伙伴看到了,非常高兴,但是他还希望我们能够顺便提供一下开奖信息,这样的话,就可以很方便的看到本期的彩票开奖号码了,好吧,其实这也不是什么困难的事情,本期我们就来实现一下,能够同时满足这两位小伙伴的想法
实现分析
首先,我们需要搞清楚的是,昨天这位小伙伴提到的Selector,指的是scrapy中的一个组件,Selector,通过from scrapy import Selector,就能够引入这个Selector选择器
另外,关于说Selector比beautifulsoup4更好,是否有依据呢?如果说是从使用的方便程度上来说,Selector提供的接口可能更容易使用一些。但是从实现上,scrapy是不是也引入了beautifulsoup4,从而做出来的Selector呢?嗯,那是另外一回事了,我们并不纠结于此。也可以说是,bs4从未离开,它只是换了一种形式陪伴着我们
总而言之呢,Selector的使用非常方便,首先引入Selector选择器,然后通过Selector解析html,然后直接使用css()的方法,就可以使用css选择器进行解析了
from scrapy import Selector
s = Selector(text=html)
html.css()
至于我们要获取的页面呢,很简单,就是彩票的开奖信息,如下所示
直接获取名称,期号,和号码就可以了。除了使用的解析方式不同,不是平常的lxml以外,其他的都和以往一样。也是通过requests发送请求,然后得到响应,这个自不必多说
完整代码实现
import requests
from base64 import b64decode
from scrapy import Selector
url = b64decode("aHR0cDovL20ueWlxaWNhaS5jb20va2ov").decode()
headers = {"user-agent": "Mozilla/5.0"}
r = requests.get(url ,headers=headers)
s = Selector(text=r.text)
for i in s.css(".lottery-item"):
title = i.css(".lotto-type dt::text").get()
phase = i.css(".lotto-type dd::text").get()
number = i.css(".lotto-ball span::text").extract()
print("种类:" + title)
print("期号:" + phase)
print("号码:", number)
print()
以下是程序的运行结果展示,可以看出,和我们在页面上看到的内容,一模一样,很好的实现了我们的需求
如果说使用体验的话,直接引入Selector选择器确实非常的好用,但是在平时却很少会看到这种使用方式,为什么呢?
我想,这可能和Selector是scrapy的一部分有很大的关系吧。习惯使用Selector选择器的,想必也会喜欢使用scrapy,那么可能就直接使用scrapy完成程序了,而不会去单独的使用requests做爬虫,然后把Selector当作其中的一部分引入。而不喜欢scrapy的使用者,或者根本就不会使用scrapy的使用者,多半也没道理会专门去只学习和使用一个Selector,因此,我们很少会看到单独拿出Selector进行使用的情况,当然,这主要是我自己的想法
如果你对此有不同的见解的话,欢迎评论留言,发表一下你的看法,那么,周末愉快,我们下周再见啦!
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- DPW-SDNet: Dual Pixel-Wavelet Domain Deep CNNsfor Soft Decoding of JPEG-Compressed Images
- Simple configuration of three-tier architecture
- [Limited Time Bonus] 21-Day Learning Challenge - MySQL from entry to mastery
- WinDbg实践--入门篇
- GPGGA NTRIP RTCM Notes
- About the data synchronization delay of MySQL master-slave replication
- 【问题】Mysql Waiting for table metadata lock 解决方案 修改lock_wait_timeout时间
- Typescript 严格模式有多严格?
- ENS 表情包域名火了!是炒作还是机遇?
- The structure of knowledge in the corners of the C language
猜你喜欢
Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上
[Deep Learning] Target Detection | SSD Principle and Implementation
ENS emoji domain name is on fire!Hype or opportunity?
牛客小白月赛53 A-E
KingbaseES V8R6备份恢复案例之---同一数据库创建不同stanza备份
IDEA2018.3.5取消双击Shift快捷键
openim支持十万超级大群
vlan简单实验
mysql deadlock
一个网络两种用途!南开&哈工程提出TINet,通过细化纹理和边缘,在显著性目标检测和伪装目标检测上实现双SOTA!...
随机推荐
Image Restoration by Estimating Frequency Distribution of Local Patches
冲刺第六周
【网络安全专栏目录】--企鹅专栏导航
Niu Ke Xiaobaiyue Race 53 A-E
微信公众号授权登录后报redirect_uri参数错误的问题
Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上
使用map函数,对list中的每个元素进行操作 好像不用map
[Typora] This beta version of Typora is expired, please download and install a newer version.
系统结构考点之多级混洗交换网络
Google Earth Engine ——我们如何筛选一个列表中的排序以时间为例
弹性盒子模型
深度学习模型训练前的必做工作:总览模型信息
在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块
对List集合中每个对象元素按时间顺序排序
Markdown的使用
JSESSIONID description in cookie
uni-app开发微信小程序踩坑
go语言慢速入门——流程控制语句
面试难题:分布式 Session 实现难点,这篇就够!
MySQL60 homework