何以安生 发表于 2023-8-11 19:19:21

python优雅地爬虫

我需要获得新闻,然后tts,在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路:获得html内容-> python的工具库解析,获得元素中的内容,完成。
https://img-blog.csdnimg.cn/7d0eb6fa19024494bdff57aea0c3517c.png
好家伙,我知道我爬取失败了。一堆js代码,看得我烦。我一去看页面发现:原来新闻的获得是走的接口,然后js插入文档的,于是啃接口。
又被难住了!接口的pageCallback是什么,感觉我的经验,这个是复杂的js加密之后的,因为没有带这个参数,可以轻易的通过接口获得想要的数据。
https://img-blog.csdnimg.cn/001186a1c0bb463ba118980fb2a9c502.png
假如没有这个参数,我其实可以为所欲为了。所以,分析pageCallback这个参数的加密非常耗时间了。也不打算研究,我决定换一种方式去研究。
https://img-blog.csdnimg.cn/002bd22fb2cb49bbbb9f01ab0a97d681.png
拿出我的终极大招:Selenium。模拟用户的操作,该不会拦截我吧。
爬虫2.0

使用Selenium模拟用户爬取页面内容,并输出成文件。关于Selenium是什么,欢迎看这篇文章:selenium Python教程。在这里,我只讲我主要的实现。
首先作为一款工具脚本,我们应该不喜欢窗口界面吧,除非你需要动态的观察程序的操作。所以,我开启了无头浏览器模式。
# 无头浏览器
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options) 
关键的driver拿到之后,剩下的过程就简单了。和一般的requests、spider爬虫一样,需要获得页面的代码,然后解析对应的元素,拿到属性或者文本。
# titles
title_elems = driver.find_elements(by=By.CLASS_NAME, value="item-title")
titles =  
是不是很神奇,看到了By.CLASS_NAME,是不是一下子联想到了CSS了。是的,你的预感足够的正确。如果以上的内容带给你足够的震撼和惊奇,请继续往下看,
# 所有的更新时间
related_elems = driver.find_elements(by=By.CSS_SELECTOR, value="div.item-related > span.time")
relateds =
# 所有的描述信息
desc_elems = driver.find_elements(by=By.CSS_SELECTOR, value="div.item-desc > span")
# 需要去除新闻摘要结尾的()内容
descs = for desc_item in desc_elems] 
没错,"div.item-related > span.time"这个是什么选择起来着?后代选择器。nice,CSS的选择器它都支持。
来个小插曲:你知道的CSS选择器有哪些?

[*]元素选择器 p div
[*]类选择器 .highlight
[*]ID选择器 #id
[*]属性选择器
[*]后代选择器 ul li
[*]子元素选择器 ul > li
[*]相邻兄弟选择器 h2+p
[*]通用选择器 *
不要觉得我是多余的了,其实这些选择器会了,基本上在页面的爬取上就是无敌了。另外,selenium还有这几种选择器:
class By:
    """Set of supported locator strategies."""
# Python学习交流q裙:708525271


    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector" 
常用的还是XPATH TAD_NAME CLASS_NAME CSS_SELECTOR 大家感兴趣的话可以自行的研究。
最后插一句话哈,作为后端的开发人员,我很希望我的接口、网站是可以正常访问的,给用户提供稳定的服务。但是,爬虫的话,对网站的危害很大的,特别是计算机的运行速度要比人快很多倍,相当于一下子加重了服务器的负担,类似于DOS攻击了。一旦爬虫劫持了流量,其它的用户就不能正常的访问了。
所以,在后端的接口设计上一般采取的是限流,但是也会降低用户的使用体验。所以,适当的学习学习就可以啦。也得守住法律的底线,话说:“python是包四餐的学科”。
好了文章分享就到这结束了,对于想把爬虫学好,或者想学了去接单就业的小伙伴,我还给大家准备了这些资料。
1、Python基础入门教程
万丈高楼平地起,基础学好了,后面学习其它方向才会稳稳当当,所以给大家准备了Python基础的详细教程 。
2、Python爬虫实战
爬虫是接单需求最多,学习起来也比较快的方向之一。
所以给大家准备了爬文本+爬数据+爬音乐+爬视频+ 爬图片+爬音频+网站验证码 +抢购等教程,视频和源码我都打好了,直接上面最后一段代码里自取。
好了,文章到这里真的结束 ,咱们下次再见!

来源:https://www.cnblogs.com/hahaa/p/17623182.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: python优雅地爬虫