首页 > 编程语言 >python优雅地爬虫

python优雅地爬虫

时间:2023-08-11 15:55:41浏览次数:42  
标签:NAME python text 爬虫 优雅 item 选择器 CSS

我需要获得新闻,然后tts,在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路:获得html内容-> python的工具库解析,获得元素中的内容,完成。

好家伙,我知道我爬取失败了。一堆js代码,看得我烦。我一去看页面发现:原来新闻的获得是走的接口,然后js插入文档的,于是啃接口。

又被难住了!接口的pageCallback是什么,感觉我的经验,这个是复杂的js加密之后的,因为没有带这个参数,可以轻易的通过接口获得想要的数据。

假如没有这个参数,我其实可以为所欲为了。所以,分析pageCallback这个参数的加密非常耗时间了。也不打算研究,我决定换一种方式去研究。

拿出我的终极大招: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 = [title_elem.text for title_elem in title_elems]

 

是不是很神奇,看到了By.CLASS_NAME,是不是一下子联想到了CSS了。是的,你的预感足够的正确。如果以上的内容带给你足够的震撼和惊奇,请继续往下看,

# 所有的更新时间
related_elems = driver.find_elements(by=By.CSS_SELECTOR, value="div.item-related > span.time")
relateds = [related_elem.text for related_elem in related_elems]
# 所有的描述信息
desc_elems = driver.find_elements(by=By.CSS_SELECTOR, value="div.item-desc > span")
# 需要去除新闻摘要结尾的()内容
descs = [desc_item.text[:desc_item.text.rfind('(')] for desc_item in desc_elems]

 

没错,"div.item-related > span.time"这个是什么选择起来着?后代选择器。nice,CSS的选择器它都支持。

来个小插曲:你知道的CSS选择器有哪些?

  • 元素选择器 p div
  • 类选择器 .highlight
  • ID选择器 #id
  • 属性选择器 [type=‘text’]
  • 后代选择器 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爬虫实战

爬虫是接单需求最多,学习起来也比较快的方向之一。

所以给大家准备了爬文本+爬数据+爬音乐+爬视频+ 爬图片+爬音频+网站验证码 +抢购等教程,视频和源码我都打好了,直接上面最后一段代码里自取。

好了,文章到这里真的结束 ,咱们下次再见!

标签:NAME,python,text,爬虫,优雅,item,选择器,CSS
From: https://www.cnblogs.com/hahaa/p/17623182.html

相关文章

  • python多进程运行
    多进程并行的模块:multiprocessingultiprocessing包的详解需要涉及到以下几个方面:进程类(Process):这是multiprocessing包的核心类,它用于创建和管理一个进程。进程类接受一个target参数,指定要在进程中执行的函数,以及一个args参数,指定要传递给函数的参数。进程类还有一些方法和属性,......
  • C++使用Py*调用Python3模块中类成员函数及数组参数传递
    1.首先来看Python模块的部分结构和代码。ssd_network_classify.py文件中有SSD_Network_Classify类及其识别的成员函数detect_image(),返回值是一个1维的不定长double型数组。classSSD_Network_Classify:#其他函数实现省略。。。defdetect_image(sel......
  • nginx or apache前端禁收录,爬虫,抓取
    一、Nginx规则直接在server 中新增如下规则即可:##################################################禁止蜘蛛抓取动态或指定页面规则By##################################################server{listen80;server_namezhangge.net;indexindex.htmlindex.......
  • python限制函数的执行时间
    importsignalclassTimeoutException(Exception):passdeftimeout_handler(signum,frame):raiseTimeoutException()deflimit_time(seconds=10):defdecorator(func):defwrapper(*args,**kwargs):signal.signal(signal.SIGAL......
  • 干掉 NullPointerException,这样写优雅!
    来源:blog.csdn.net/zjhred/article/details/84976734在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException。假设我们有两个类,他们的UML类图如下图所示在这种情况下,有如下代码:user.getAddress().getProvince();这种写法,在user为null时,是有可能......
  • 某公司笔试题 - 计算字符串最后一个单词的长度(附python代码)
    题目:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000(字符串末尾不变以空格未结尾)。python代码:str=input("请输入一个字符串:")iflen(str)<5000andlen(str)>0:#去掉字符串前后的空格s=str.strip("")#已空格为标记,对字符串切片......
  • C++调用Python传入参数、图片并接受返回值
    最近在做C++调用Pytorch模型进行识别的任务,C++关于Pytorch的教程很少,基本上都是用Python写的,但因为要识别任务是实时的,Python的执行效率不如C++,所以主题代码还是没用Python。网上利用C++调用Pytorch模型的方法主要是把模型文件转化成C++可以加载和执行的模型文件,利用的是TorchS......
  • python中偏函数--parital
    以往我没写一个函数并调用def_xx(a1,a2):returna1+a2data=_xx(11,22)print(data)使用partial函数之后fromfunctoolsimportpartialdef_xx(a1,a2):returna1+a2yy=partial(_xx,a2=100)#偏函数,包裹一个函数,并可以默认传一个参数data=y......
  • ​python爬虫——爬虫伪装和反“反爬”
    前言爬虫伪装和反“反爬”是在爬虫领域中非常重要的话题。伪装可以让你的爬虫看起来更像普通的浏览器或者应用程序,从而减少被服务器封禁的风险;反“反爬”则是应对服务器加强的反爬虫机制。下面将详细介绍一些常见的伪装和反反爬技巧,并提供对应的代码案例。1.User-Agent伪装User......
  • python调用zabbix api接口实时展示数据
    zabbixapi接口来进行展示。经过思考之后,计划获取如下内容:  1、  获得认证密钥  2、  获取zabbix所有的主机组  3、  获取单个组下的所有主机  4、  获取某个主机下的所有监控项  5、  获取某个监控项的历史数据  6、  获取某个监控项的......