随笔分类 -  Python爬虫

摘要:[toc] 1.需求背景 拉勾网的爬虫是做的很好的,要想从他的网站上爬取数据,那可以说是相当的不容易啊。如果采取一般的requests + xpath解析,很快就能给你识别为爬虫,并提示你操作频繁。基于这种情况,只能使用selenium来进行爬取,并且在爬取的时候还不能太快,太快也容易闪到腰的,下面 阅读全文
posted @ 2020-04-13 14:33 OLIVER_QIN 阅读(842) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.介绍 from selenium.webdriver.remote.webelement import WebElement类是每个获取出来的元素的所属类。 有一些常用的属性: get_attribute:这个标签的某个属性的值。 screentshot:获取当前页面的截图。这个方法 阅读全文
posted @ 2020-04-11 10:57 OLIVER_QIN 阅读(658) 评论(0) 推荐(0) 编辑
摘要:有时候频繁爬取一些网页。服务器发现你是爬虫后会封掉你的ip地址。这时候我们可以更改代理ip。更改代理ip,不同的浏览器有不同的实现方式。这里以Chrome浏览器为例来讲解: 阅读全文
posted @ 2020-04-11 10:47 OLIVER_QIN 阅读(966) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.示例说明 有时候窗口中有很多子tab页面。这时候肯定是需要进行切换的。 selenium提供了一个叫做switch_to_window来进行切换,具体切换到哪个页面,可以从driver.window_handles中找到。示例代码如下: 2.实战演练 阅读全文
posted @ 2020-04-11 10:10 OLIVER_QIN 阅读(663) 评论(0) 推荐(0) 编辑
摘要:[toc] 现在的网页越来越多采用了 技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个 ,那么就会抛出 的异常。为了解决这个问题。所以 提供了两种等待方式:一种是隐式等待、一种是显式等待。 1.隐式等待 调用 。那么在 阅读全文
posted @ 2020-04-09 18:22 OLIVER_QIN 阅读(688) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.示例代码 2.实战演练 验证删除所有cookie这个操作之前,我们先注释语句 执行查看效果,运行代码后,打开浏览器,进入【设置】 【隐私设置和安全性】 【网站设置】 【Cookie和网站数据】 【查看所有Cookie和网站数据】,如下图: 从上图看到此时是有cookie数据的,接着我 阅读全文
posted @ 2020-04-09 17:56 OLIVER_QIN 阅读(213) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.理论部分 有时候在页面中的操作可能要有很多步,那么这时候可以使用鼠标行为链类ActionChains来完成。比如现在要将鼠标移动到某个元素上并执行点击事件。那么示例代码如下: 还有更多的鼠标相关的操作。 click_and_hold(element):点击但不松开鼠标。 contex 阅读全文
posted @ 2020-04-09 17:36 OLIVER_QIN 阅读(228) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.操作输入框 操作输入框分为2个步骤,如下 第一步:找到这元素 第二步:使用 ,将数据填充进去 以下是示例代码: 使用 方法可以清除输入框中的内容,示例代码如下: 实战演练 2.操作checkbox 因为要选中checkbox标签,在网页中是通过鼠标点击的。因此想要选中checkbox 阅读全文
posted @ 2020-04-09 17:10 OLIVER_QIN 阅读(363) 评论(0) 推荐(0) 编辑
摘要:[toc] 说明:find_element是获取第一个满足条件的元素。find_elements是获取所有满足条件的元素。 1.使用介绍 2.实战案例 2.1 根据ID获取,打开百度,在输入框输入【中国】 阅读全文
posted @ 2020-04-08 11:33 OLIVER_QIN 阅读(175) 评论(0) 推荐(0) 编辑
摘要:[toc] selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。 selenium 可以根据我们的指令 阅读全文
posted @ 2020-04-08 11:09 OLIVER_QIN 阅读(328) 评论(0) 推荐(0) 编辑
摘要:Python自带的解释器是CPtyhon。CPtyhon解释器的多线程实际上一个假的多线程(在多核CPU中,只能利用一核,不能利用多核)。同一时刻只有一个线程在执行,为了保证同一时刻只有一个下线程在执行,在CPython解释器中有一个东西叫做GIL,叫做全局解释器锁。这个解释器锁是有必要的,因为CP 阅读全文
posted @ 2020-04-07 18:31 OLIVER_QIN 阅读(189) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.需求描述 爬取斗图啦网站,地址为:https://www.doutula.com/photo/list/,网站截图如下: 现在需要按页爬取前2页的表情包,那么接下来直接上代码吧。 2.实战代码 2.1 单线程爬取 单线程爬取的话,存在一个问题,下载表情包太慢了,等逐一下载。为了解决这 阅读全文
posted @ 2020-04-05 12:34 OLIVER_QIN 阅读(471) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.线程安全队列简介 在线程中,访问一些全局变量,经常需要加锁。如果想把数据存储到某个队列中,Python提供了一个内置模块 。Python中的queue提供了同步的、线程安全的队列类,包括FIFO(先进先出)队列Queue,LIFO(后入先出)队列LifoQueue,这些队列都实现了锁 阅读全文
posted @ 2020-04-04 21:18 OLIVER_QIN 阅读(640) 评论(0) 推荐(0) 编辑
摘要:[toc] 生产者消费者模型是多线程开发中经常见到的一种模式。生产者专门生产一些数据,把这些数据放到变量中,消费者从变量中取出一些数据来消费。由于要使用到中间变量,这些变量一般是全局变量,所以使用使用锁机制来保证数据的完整性。就好比老爸去工作赚钱存在银行,儿子从银行取钱来花,==老爸是生产者,银行就 阅读全文
posted @ 2020-04-04 16:40 OLIVER_QIN 阅读(543) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.共享全局变量 1.1 共享全局变量问题 在一个进程内的所有线程共享全局变量,很方便在多个线程之间共享数据,但是存在一个缺点,当线程无序执行的时候,会导致全局变量的混乱,导致数据错误。 例如: 假设两个线程t1和t2都要对全局变量g_num(默认是0)进行加1运算,t1和t2都各对g_ 阅读全文
posted @ 2020-04-04 15:36 OLIVER_QIN 阅读(383) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.什么是"多线程"? 多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。举个最简单的例子说明:多线程就像火车的每一个车厢,而进程则是火车。 ==并发:==指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多 阅读全文
posted @ 2020-04-04 14:51 OLIVER_QIN 阅读(246) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.什么是csv? 逗号分隔值(Comma Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。 2.csv文件的两种读取方式 2.1 reader读取 输出结果: 姓名:张三 年龄:15 姓名:李四 阅读全文
posted @ 2020-04-04 12:29 OLIVER_QIN 阅读(238) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.什么是json? json(JavaScript Object Notation)是一种轻量级的数据交换格式。简单和清晰的层次结构使得json成为理想的数据交换语言。易于阅读和编写,同时也易于机器解析和生成,并有效的提升网络传输效率。 json支持的数据格式: 对象(字典)。使用花括 阅读全文
posted @ 2020-04-04 01:55 OLIVER_QIN 阅读(390) 评论(0) 推荐(0) 编辑
摘要:[toc] re模块有以下这些函数: compile用于编译正则表达式,生成一个Pattern对象 match方法:从开始位置开始查找,一次匹配 search方法:从任何位置开始查找,一次匹配 findall方法:全部匹配,返回列表 finditer方法:全部匹配,返回跌代器 split方法: 分割 阅读全文
posted @ 2020-04-02 14:38 OLIVER_QIN 阅读(288) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.group分组 在正则表达式中,可以对过滤的字符串进行分组,分组使用圆括号的方式。 1. 与`group(0)`是等价的 2. 返回的是里面的子组,索引从1开始 3. :返回的是第一个子组,可以传如多个 阅读全文
posted @ 2020-04-02 12:01 OLIVER_QIN 阅读(761) 评论(0) 推荐(0) 编辑