爬虫
文章平均质量分 93
daiyu__zz
立志要成为斜杠青年!
展开
-
多线程还是多进程的选择及区别
鱼还是熊掌:浅谈多进程多线程的选择关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际...转载 2018-07-10 21:23:40 · 287 阅读 · 0 评论 -
Selenium添加Cookie绕过验证码登录
本文以3D片源网站为例,使用Selenium首先模拟登录,手动输入验证码,获取登录之后的cookie,其次将登录之后的cookie写入 .yaml文件,在此登录时直接读取文件。首先获取登陆后的cookie,并写入文件。import yaml,time,osfrom selenium import webdriverurl = 'http://www.3dpianyuan.net/'dri...原创 2018-11-11 16:49:40 · 1280 阅读 · 0 评论 -
Selenium添加Cookie模拟无验证码登录
最近爬虫碰见需要用selenium模拟登录,有验证码滑块+图片点击验证,在解决过程中发现一篇很好的示例,虽然是无验证码的那种,但是还不错,先记下来!代码及注释如下:#!coding=utf-8import timefrom selenium import webdriverimport pickleclass BaiduSpider(object): def __init_...转载 2018-11-08 20:36:51 · 507 阅读 · 0 评论 -
使用mitmdump爬取手机
操作系统:window 10python 版本:python 3.6.5抓包工具fiddler、mitmproxy工具结介绍fiddler就不介绍了,是常用的抓包工具。这里介绍一下mitmproxy。mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似于Fiddler、Charles的功能,只不过它是一个控制台的形式操作。mitmproxy还有两个关联组件。一个是mitm...原创 2018-11-23 17:53:16 · 3058 阅读 · 5 评论 -
关于requests Post方式上传文件
背景前两天需要调用一个接口,使用post方式上传文件。于是使用Python的requests进行发送post请求,但是一直报服务器500的错误,感觉很纳闷,折磨我好久之后才注意到之前使用的post请求只是携带一些字段,而这次是需要向接口上传文件。步骤先这样,,,再这样,,,嗯,解决了,先说一下post请求四种传送正文的方式;POST请求四种传递正文的方式(1)请求正文是applicati...原创 2018-12-02 11:47:14 · 21028 阅读 · 3 评论 -
mitmdump设置二次代理抓包国外软件
背景:之前一直想使用抓包软件抓Vigo video的包,奈何是海外软件,需要翻墙,翻墙后各种抓包软件都试过,因为太菜,国外代理不会配置,因此这件事一直搁置,今天看见在简书上看见一片文章,https://www.jianshu.com/p/dfd1e2753d71, MITMProxy如何配置二次代理,给了我启发,在mitmdump成功设置了国外代理。附上代码:def request() : ...原创 2018-12-07 21:05:34 · 4890 阅读 · 4 评论 -
下载m3u8视频及在Linux下将ts合并为mp4格式
背景在爬取视频时偶尔会遇见m3u8格式的视频链接,视频下载后为多个ts文件,下面分享如何下载m3u8格式视频以及在Linux下将ts文件合成mp4文件。m3u8格式链接解析url = xxxxx.m3u8#获取m3u8文件的文本信息all_content = requests.get(url=url, verify=False).text#解析文本信息file_line = al...原创 2018-12-12 10:39:34 · 6603 阅读 · 0 评论 -
python selenium三种等待方式详解
引言:当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待了,等待元素可见再继续运行程序;正文:1.强制等待(sleep)设置等待最简单的方法就是强制等待,其实就是time.sleep()方法,不管它什么情况,让程序暂停运行一定时间,时间过后继续运行;缺点时不智能,设置的时间太短,元素还没有加载出来,那照...转载 2019-01-03 20:46:06 · 745 阅读 · 0 评论 -
selenium循环点击无法定位元素问题
【问题】:selenium循环点击进入下级页面时,第一次点击返回后不能继续循环,无法定位元素。【原因】:selenium模拟点击进入下一页操作后退出,原页面刷新后元素的属性没有变,但是之前获得的element却变了,之前所有的额定位元素element都过期了。【解决】:1.页面刷新后,在循环体中重新定位一次,覆盖掉之前的定位。2.第一次获取全部元素后,通过len()函数获取循环总个数;3...原创 2019-01-09 19:35:55 · 2789 阅读 · 0 评论 -
selenium切换窗口的几种方法小结
第一种方法使用场景打开多个窗口,需要定位到新打开的窗口;使用方法:# 获取打开的多个窗口句柄windows = driver.window_handles# 切换到当前最新打开的窗口driver.switch_to.window(windows[-1])举例说明# _._ coding:utf-8 _._from selenium import webdriverimpor...转载 2019-01-09 20:01:35 · 29566 阅读 · 3 评论 -
向列表中循环添加字典时数据覆盖为题的分析与解决
问题:预期打印出来的list为:[{‘num’: 0}, {‘num’: 1}, {‘num’: 2}],结果为[{‘num’: 2}, {‘num’: 2}, {‘num’: 2}]list=[]dictionary={"num":""}for i in range(3): dictionary["num"]=i list.append(d)print(list) ...原创 2019-01-09 20:34:53 · 1635 阅读 · 0 评论 -
APP开启SSLPinning后导致不能抓包解决方案
什么是SSLPinning?SSL Pinning是一种防止中间人攻击(MITM)的技术,主要机制是在客户端发起请求–>收到服务器发来的证书进行校验,如果收到的证书不被客户端信任,就直接断开连接不继续求情。所以在遇到对关键请求开启SSL Pinning的APP时,我们抓包就只能看到APP上提示无法连接网络或者请求失败之类的提示;而在抓包工具上面,要么就只能看到一排 CONNECT 请求,...原创 2019-04-26 10:34:40 · 19542 阅读 · 1 评论 -
爬虫之ssh证书警告错误
在写爬虫时偶尔会碰见ssh证书警告的错误,得不到我们想要的信息,这里转载一个我在博客园见到的一篇博客,三种方式解决这个问题。错误信息:requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed...转载 2018-10-31 10:44:51 · 695 阅读 · 0 评论 -
scrapy框架中多个spider同时运行:scrapyd的部署及使用
scrapy是一个爬虫框架,而scrapyd是一个网页版管理scrapy的工具,scrapy爬虫写好后,可以使用命令运行,但是如果能够在网页上操作就比较方便。scrapyd就是为了解决这个问题,能够在网页端查看正在执行的任务,也能新建和终止爬虫任务,功能比较强大。Scrapyd使用详解:1.安装scrapydpip install scrapyd2.安装scrapy-cli...转载 2018-09-04 17:32:54 · 3034 阅读 · 0 评论 -
代理池的使用
代理池的使用服务器会检测某个IP在单位时间内的请求次数,如果超过了某个阀值,那么服务器会直接拒绝,返回一些错误信息代理的设置、代理池的维护、付费代理的使用、ADSL拨号代理的搭建方法多种请求库的代理设置方法代理池的维护代理池的基本模块:存储模块、获取模块、检测模块、接口模块存储模块:使用redis的有序集合,用来做代理的去重和状态标识获取模块:此模块尽量从不同来...原创 2018-08-21 20:46:24 · 1721 阅读 · 1 评论 -
简单了解logger.debug
看别人代码里常出现LOGGER.debug,以前都不甚了解,现在来了解一下简单的说,就是配合log的等级过滤输出比如,你在开发的时候,要验证一个方法有没有被调用到,为了方便调试,通常会在这个方法开始的时候加一些system.out。但是项目真正发布的时候这些代码通常是要移除掉的,所以通常更建议用logger来记录所以你可能会加logger.debug。 为什么是debug而不是info ...转载 2018-07-19 21:47:35 · 3442 阅读 · 0 评论 -
异步函数(即协程)
调用生成器函数,会返回一个生成器; 调用异步函数,会返回一个协程 异步协程为什么能够提高下载效率? 发送请求后,需要等待服务器返回response,而使用异步请求可以在等待期间处理别的事情; 异步请求充分利用了等待时间,所以异步协程能提高下载效率;使用异步协程实现批量下载#创建协程init_req = start_request()task = asyncio.ensur...原创 2018-08-17 21:11:25 · 1335 阅读 · 0 评论 -
Spider: requests的应用
requests的应用Requests库的7个主要方法 方法 说明 requests.request() 构造一个请求,支撑以下各方法的基础方法 requests.get() 获取HTML页面的主要方法,对应于HTTP的GET requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD request...原创 2018-08-17 21:18:00 · 248 阅读 · 0 评论 -
requests库和Scrapy比较
requests和Scrapy比较相同点: 两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线 两者可用性都好,文档丰富,入门简单 两者都没有处理js、提交表单、对应验证码等功能功能(可扩展) requests Scrapy 页面级爬虫 网站级爬虫 功能库 框架 并发性考虑不足,性能较差 并发性好...原创 2018-08-17 21:21:58 · 1938 阅读 · 0 评论 -
urllib的简单应用
urllib提供了一系列用于操作URL的功能:使用urllib发送get请求import urllib.requestwith urllib.request.urlopen("http://www.baidu.com") as response: html = response.read() print(html.decode()) #获得html页面内容 ...原创 2018-08-17 21:26:41 · 188 阅读 · 0 评论 -
通用爬虫
通用爬虫CrawlSpider:CrawlSpider是Scrapy提供的一个通用Spider。在spider里,我们可以指定一些爬取规则来实现页面的提取,这些爬取的规则由一个专门的数据结构Rule表示。Rule里包含提取和根进页面的配置,Spider会根据Rule来确定当前页面的哪些链接需要爬取、哪些页面的爬取结果需要用那些方法解析等CrawlSpider继承自Spider类,除了Spi...转载 2018-08-17 21:32:49 · 1030 阅读 · 0 评论 -
使用Selenium爬取动态网页
使用selenium优点:所见既所得通过page_source属性可以获得网页源代码selenium可以驱动浏览器完成各种操作,如填充表单、模拟点击等。获取单个节点的方法:find_element_by_idfind_element_by_namefind_element_by_xpathfind_element_by_link_textfind_element_by_pa...原创 2018-08-18 09:28:38 · 3255 阅读 · 0 评论 -
item Pipeline
item Pipeline及自带图片下载当item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对item的处理以下是item pipeline的一些典型应用:清理HTML数据验证爬取的数据(检查item包含某些字段)查重(并丢弃)将爬取结果保存到数据库中每个item pipeline组件是一个独立的python类,...原创 2018-08-17 20:02:01 · 454 阅读 · 0 评论 -
Scrapy:框架组成与工作原理——组件与数据流
Scrapy组件与数据流1.Scrapy组件与数据流ENGINE:引擎,是scrapy框架的核心;内部组件SCHEDULER:调度器,负责对SPIDER提交的下载请求进行调度;内部组件DOWNLOADER:下载器,负责下载页面,即发送HTTP请求和接受HTTP响应;内部组件SPIDER:爬虫,负责从页面解析和提取数据,以及生成新的HTTP请求,用户组件MIDDLEWARE:中间件,...原创 2018-08-17 20:10:14 · 1248 阅读 · 0 评论 -
Python多进程原理与实现
1 进程的基本概念什么是进程? 进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。进程的生命周期:创建(New)、...转载 2018-08-21 16:16:29 · 20700 阅读 · 3 评论 -
Python多线程的原理与实现
Python多线程原理与实战目的:(1)了解python线程执行原理(2)掌握多线程编程与线程同步(3)了解线程池的使用1 线程基本概念1.1 线程是什么?线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别: (1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2) ...转载 2018-08-21 17:55:21 · 77432 阅读 · 15 评论 -
爬取websocket实时数据
一、什么是websocketWebsocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务端之间的数据交换变得更加简单,允许服务器主动向客户端推送数据。在Websocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。Websocekt优点:较少的控制开销:只需要进行一次握手,携带一次请求头信息即可,后续只传输数据...转载 2019-08-16 17:11:08 · 1996 阅读 · 2 评论