文章目录
爬虫
-
简述通用爬虫和聚焦爬虫的概念:
1、 通常情况下,我们将搜索引擎使用的爬虫我们称之为通用爬虫,谷歌、百度等浏览器,他的作用是把整个互联网上的网页下载到本地,形成一个互联网内容的镜像备份,在对这些网页进行一定的处理(例如提取关键字、去掉广告等)之后,就可以提供一个用户检索内容的接口,一般的网站都会通过robots协议来告诉通用爬虫,那些页面可以抓取,那些不可以抓取。优点:抓取范围广,针对性较低
2、 有目的的抓取特定的内容,会对数据进行筛选和处理。爬虫开发一般指的就是聚焦爬虫 -
完整的URL都包括哪些内容
1、 一个完整的url包含协议(http、https等)、主机地址、端口、路径和资源。其中不同的协议代表不同资源查找方式、资源传输方式;主机地址指的是存放资源的主机(服务器)的IP地址(域名),端口是用来区分不同的服务的,路径是指资源在主机中的具体位置 -
简述HTTP协议和HTTPS协议的区别与联系:
1、 HTTPS协议需要到证书办法机构(CA)申请证书,一般免费证书很少,需要像证书颁发机构支付费用。HTTP协议是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议,采用HTTP协议传输数据的客户端和服务端,客户端给服务器发送请求,服务器接收到请求会直接将数据返回。采用HTTPS协议的时候,客户端给服务器发送请求,服务器接收到请求后不会马上将数据返回,而是将一个证书传递给客户端(这个证书中包含了公钥),客户端信任这个证书后,客户端发出的信息会经过加密后在发送给服务器,服务器接收到这个信息后会使用服务器的私钥进行解密,同样的,服务器发送给客户端的信息也会通过私钥进行加密,在客户端通过公钥进行解密。
-
robots协议
1、 爬虫协议,网络机器人协议,君子协议,全称“网络爬虫排除标准”(robots Exclusion Protocol),主要针对搜索引擎,即通用爬虫,一般放在网站跟目录下, /robots.txt ,是一个约定俗称的道德规范,并不是强制执行的法律,知识约定俗称的道德规范,并不能保证万盏的隐私。
目前爬虫领域仍然处在拓荒阶段,属于灰色领域。简而言之,爬取用户能看到的内容,目前没有法律明文规定,但是如果抓取数据库等,属于黑客行为,要负法律责任的。 -
请说出HTTP请求半酣哪几部分,至少4个请求头以及含义
1、HTTP求情包含请求头和请求体两个部分,请求头半酣客户端的环境和客户端请求信息等。请求体就是客户端要发送给服务器的数据,比如登录注册的时候,客户端需要将账号密码发送给服务器,那么这个时候的账号密码数据就可以作为请求体发送给服务器。
2、常见请求头:
HOST:客户端像访问的服务器主机地址(域名)
USER-Agent: 客户端的类型,客户端的软件环境
ACCEPT:客户端所能接收的数据类型
ACCEPT-language:客户端的语言环境
ACCEPT-Encoding:客户端支持的数据压缩格式
connection:长连接 短链接
cookie:验证身份
referer:标志从那个页面跳转过来 -
HTTP响应包含哪几部分,至少常见状态码及含义。
1、HTTP响应包含响应头和响应体。响应头包含了对服务器的描述和对返回数据的描述,响应题就是服务器要给客户端返回的数据
2、常见状态码:
200:请求成功接收
304:再次请求事,请求的内容没有发生改变
403:禁止访问,客户端没有权限
404:服务器无法根据客户端请求找到资源
500:服务器内部错误,无法完成请请求 -
你用过的爬虫模块和爬虫框架都有那些
1、下载数据 —urllib/requests
2、解析数据 —re/lxml/bs4/pyquery
3、缓存和持久化 —pymysql/redis/pymongo/常见文件格式 csv json txt等
4、 生成数字签名 — hashlib
5、序列化- pickle/json
6、压缩 —zlib
7、调度器:进程(multiprocessing)/线程(threading)/协程(coroutine)
8、框架: Scrapy -
讲数模拟登录流程以及爬虫中如何使用cookie
1、模拟登录可以分为三种方式:a、使用seleninum框架,模拟chrome浏览器来模拟人的行为,打开浏览器,获得输入账号的输入框,并自动填入账号密码内容,并模拟点击登录。 b、使用模拟Ajax请求,分析页面中登录的URL地址、传递参数,使用这种凡是可以模拟API接口进行登录。c、提前登录,复制cookie,携带cookie登录 -
图片放到连接技术是如何实现的以及如何破解
1、网站防图片盗链接通常是检查获取图片的HTTP请求头中Referer字段,改字段的作用是告诉服务器获取图片的请求是从哪个页面链接过来的,如果没有该字段的页面并不是本网站,那么就可以认定盗链接行为,从而通过拦截过滤器加以拒绝,知道了这一点,破解也很简单,就是在hTTP请求头中田间Referer字段,并指定为提供图片的网站的某个有效URL即可。 -
常见的HTML文件解析方式都有那些:
1、正则表达式,速度快,re模块
2、Xpath解析,速度快,python库有lxml/bs4
3、css选择器解析,速度慢,python库中有bs4/pyquery -
什么是懒加载技术,如何爬取懒加载的图片
1、在很多网站中,如果页面中的图片内容非常多,那当用户在访问该页面时,页面中的图片不用全部加载出来,值用加载在浏览器框中展示的部分图片即可,因此懒加载就是当用户浏览到该图片信息时,菜价在img中的src属性,实现懒加载的关键点如下:a、页面中的img元素,如果没有src属性,浏览器就不会发出请求去下载图片(也就是没有请求,也没有提高性能),一旦通过javascript设置了图片的路径,浏览器才会发送请求,b、如何获取真正的路径,整整的路径存在元素的data-url属性中,当刘阿龙年起在访问到该图片时,将data-url地址设置到src属性中即可。 -
如何爬取的数据为JSON数据,如何解析
1、 通过Python内置的json模块中的loads函数可以将json格式的数据解析成python的字典或数组 -
selenium+phanttomJs是什么,有什么作用
1、selenium是一个自动化测试工具,利用他可以驱动浏览器执行特定额动作,如点击、表单操作等,同时还可以获取浏览器上呈现的网页源代码,做到可见及可爬。
2、对于一些JS动态渲染的页面来说,此种抓取方式非常有效,phantomeJS是一个无头浏览器(headless browser,也称无界面浏览器,他是一个支持脚本变成的Webkit浏览器引擎,由于phantonJs是无界面浏览器,爬取是不需要开界面,占用内存较小,所以运行起来比打开界面的爬取方式更高效,除了phanttonJs)支持无头浏览器模式,目前主流的浏览器如chrome和firefox也支持headless浏览器模式进行无界面爬取。 -
简述scrapy基本结构和工作原理
spiders—spiderMiddleWaret---->engine------->scheduler------>engine-----downloadMiddleware—>downloader<--------internet
downloader----downloadMiddleware—>engine-----spider middleware---->spiders-------engine---->piplines----->save(SQL) -
怎么理解进程和线程
1、进程是指在系统中,证字啊运行的一个应用程序,进程之间相互是独立的,每隔进程运行在其转悠且受保护的内存空间内,所有的应用程序都是通过代码来实现的,所以应用程序就可以堪称我们写好额一个代码,进程就是我们正在执行的这个代码,代码中我们避免不了要生命很多变量去保存各种各样的数据,那么这些数据就是保存在这个进程对应的内存空间中的,当进程对应的代码执行结束了,进程就结束,其对应的内存空间也会被注释。进程要想执行任务,必须得有进程(每隔进程必须要有一个线程),一个进程(程序)的所有任务都在线程中执行,如果八斤橙可以堪称一个车间,线程就是车间里的工人,车间的特点就是,每一个车间都有一个属于自己的转悠的空间,并且一个车间里面可以有多个工人,但是车间想要生产,那么车间中至少一个工人。 -
如何理解同步、异步、并行、并发
1、同步:多任务,多个任务之间执行的时候要求有先后顺序,必须一个先执行完成之后,另一个才能继续执行,只有一个主线。
2、异步:多任务,多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响,存在的多条运行主线
3、并行和并发都可以看成是多个任务可以同时执行,但是他们之间有差别,并行才是真正的同时执行但是要真正做到并行需要多核的支撑,并发是通过时间切片,让cpu快速在多个任务之间切换造成的同时执行的假象。 -
Scrapy和Scrapy-Redis有什么区别
1、Scrapy是一个通用的爬虫框架,但是本身并不支持分布式,Scrapy-Redis是为了更方便地实现Scrapy分布式爬取,而提供了一些Redis为基础的组件。
通过Scrapy-Redis组件可以提供的主要功能包括:
a、爬取队列的功能
b、去重过滤的功能
c、和中断后重新爬取的功能
-
如何解决基于验证码的反爬措施:
1、如果是简单的验证码,可以通过pillow模块进行识别
2、如果相对于识别难度太高,可以考虑云打吗等服务
3、关于滑动验证码:可以使用selenium通过操作标签滑动实现 -
简述CrawlSpider的定义以及用法
1、CrawlSpider是Spider的派生类,Spider的设计原则只怕去start_url列表中的网页,而Crawl Spider类定义了一些规则来提供跟进网址的方便的机制,从爬取的网页中获取网址并继续爬取的工作更合适(规律性更强的网站)
scrapy genspider -t crawl 爬虫名 域名
定义rule规则,linkExtractors等。
-
简述代理是什么以及你是如何使用代理的
1、当我们需要大量的爬取网页信息时,除了切换User-Agent之外,另外一个重要的方式就是设置代理IP,以防止我们的爬虫被拒绝,设置代理IP通常情况下可以使用第三方接口,也可以自己做IP代理池,通常情况下,一些代理网站会提供一些免费的ip代理,但是其稳定性和可用性很难得到保证,另外一个代理就是设置User-Agent,用以模拟不同的浏览器的访问行为。
2、ip分类
透明:对方知道我们的真实ip
匿名 对方不知道我们的真实ip,但是知道使用了代理
高匿:对方不知道我们的真实ip,也不知道我们使用了代理比如:爬取淘宝:服务器获取内容反扒考虑:1、ip地址 2、User-Agent 3、用户账号(同一个用户满世界乱跑,会被封号)
-
Scrapy在爬取过程中余姚断网如何保证数据的完整性
1、任何程序在运行的过程中,都有可能会崩溃,爬虫也不例外,当我们爬取的数据量很大很大的时候,爬取的过程难民啊会出现各种各样的问题导致程序崩溃断掉,这个时候我们急需要记录爬虫的状态,当爬虫挂掉的时候可以恢复原来的状态继续泡,Scrapy简单易用,效率极高,自带多线程机制,但是也正因为它的多线程机制导致在用Scrapy写爬虫的时候处理断点续爬很恼火,当请求中加入了优先级的属性的时候,每次Scrapy从请求队列中取请求的时候就会判断优先级,先取出优先级高的去访问,由于Scrapy默认启动是个线程,这时优先级为100的就会在优先级为90之前被取出请求队列,这样呢我们就能大体上保证爬取网页的顺序性,保证了顺序性之后呢,我们就要记录已经爬取的页数,由于发送求情,下载页面、存取数据这几个动作时顺序执行的,也就是说程序发送了这个请求不代表此时已经爬取到这一页了,只有当收到响应的时候我们才能确定我们已经获取到了数据,这是我们才能记录爬取的位置。 -
如何爬取网页上的动态内容
为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用Scrapy爬虫来说就是一个很大的问题,因为Scrapy本身并没有JS引擎,所以爬取的都是静态页面,图和分析网站上动态加载出来的内容,可以通过查看管理员工具来获得网站发送的AJAX,通过调用Ajax请求拿到返回的JSON数据,返回的JSON数据就是网页中动态渲染的数据,另外一种方式就是使用自动化测试工具Selenium加载phantomJS或者时ChromeDriver等浏览器来加载动态内容。 -
简述分布式爬虫的原理:
1、分布式爬虫实际上就是在多台主机上同时运行爬虫任务协同爬取,协同爬取的前提时共享一个爬取请求队列,各台主机不需要维护自己的爬取请求队列,二十从共享队列存取请求。但是每台主机有各自的调度器和下载器,所以调度和下载功能分别完成,这样就可以多台主机协同爬取,爬取效率成倍提高。
2、通过Redis的数据结构(如列表,集合。有序集合)来实现共享爬取请求队列
通过利用Redis的集合来实现分布式请求的去重
通过调度器对Redis的爬取请求队列进行判断,当Redis队列为空时,爬虫重新爬取,如果不为空,爬虫接着上次终端处继续爬取。 -
你遇到过那些反扒措施以及应对的手段是什么?
1、检查HTTP请求头
accept
user-agent ----fake-useragent 第三方库
Referer
Accept-encoding/language
2、检查网站的cookie
插件:EditthisCookie
脚本生活曾动态的cookie
构建cookie池
3、动态生成页面内容
JavaScript逆向
selenium+phantomJs
4、对访问频率进行限制
对爬虫进行限速。
隐藏身份
IP代理
5、填写表单或输入验证码
a、手动输入post提交
b、识别验证码,机器学习
c、第三方服务(云打码)
6、爬虫陷阱(蜜罐)
网页上有诱使爬虫爬取的隐藏链接(陷阱或者蜜罐),可以通过selenium调用PhantonJS来判断连接是否可见或者出现在可视区域来避开。 -
简述Scrapy中间件
spider middleWare和downloadMiddleWare
spier middleware是在运行过程中进行一些处理,而下载器中间件实在页面被下载时进行的一些处理spiderMiddleWare有一下几个函数被管理:process_spider_input接收一个对象并处理,process_spider_exception在爬取出现异常的时候被调用,process_start_requests当spider发出请求时被调用。
downloadMiddleWare有一下几个函数管理:process_request在请求通过下载中间件的时候被调用,process_response在下载结果经过中间件被调用,process_exception在瞎子出现异常时被调用。