当前位置:网站首页>不用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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- Babbitt | Metaverse Daily Must Read: The shuffling is coming, will the digital Tibetan industry usher in a new batch of leaders in the second half?Will there be new ways to play?...
- 这本记述40年前历史的游戏书,预言的却是当下的事
- 【网络安全专栏目录】--企鹅专栏导航
- y82.第四章 Prometheus大厂监控体系及实战 -- 监控扩展和prometheus 联邦(十三)
- 关于SFML Rect.inl文件报错的问题
- 导航栏----个人中心 Dropdown
- JS中获取元素属性的8大方法
- bgp路由过滤
- Niu Ke Xiaobaiyue Race 53 A-E
- mysql deadlock
猜你喜欢
用于视频压缩伪影消除的深度卡尔曼滤波网络
你需要知道的ES6—ES13开发技巧
【限时福利】21天学习挑战赛 - MySQL从入门到精通
Babbitt | Metaverse Daily Must Read: The shuffling is coming, will the digital Tibetan industry usher in a new batch of leaders in the second half?Will there be new ways to play?...
opencv,numpy,tensor格式转换
【信息安全技术】RSA算法的研究及不同优化策略的比较
kubernetes
【网络安全专栏目录】--企鹅专栏导航
ENS emoji domain name is on fire!Hype or opportunity?
JS中获取元素属性的8大方法
随机推荐
8 ways to get element attributes in JS
三层架构简单配置
【限时福利】21天学习挑战赛 - MySQL从入门到精通
Babbitt | Metaverse Daily Must Read: The shuffling is coming, will the digital Tibetan industry usher in a new batch of leaders in the second half?Will there be new ways to play?...
JDBC(详解)
对一次生产环境产生OOM的记录,结论:除非在自己完全有把握的情况下,否则不要偷懒查询无用字段
MySql创建数据表
什么是公约数
kubernetes
【菜鸡含泪总结】如何用pip、anaconda安装库
Cookie中的JSESSIONID说明
ValueError: Append mode is not supported with xlsxwriter解决方案
[Limited Time Bonus] 21-Day Learning Challenge - MySQL from entry to mastery
面试难题:分布式 Session 实现难点,这篇就够!
Niu Ke Xiaobaiyue Race 53 A-E
巴比特 | 元宇宙每日必读:洗牌将至,数藏行业下半场是否会迎来新一批领头羊?是否会出现新玩法?...
GPGGA NTRIP RTCM Notes
[Deep Learning] Target Detection | SSD Principle and Implementation
在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块
Outsourcing worked for three years, it was abolished...