最全python爬⾍⾯试笔试题及答案汇总,三万多字,持续更
新,适合新⼿,应届⽣
⽬录
爬⾍和⽹络编程⾯试题
、动态加载⼜对及时性要求很⾼怎么处理?
Selenium+Phantomjs
尽量不使⽤ sleep ⽽使⽤ WebDriverWait
、分布式爬⾍主要解决什么问题?
(1)ip
(2)带宽
(3)cpu
(4)io
URL,即统⼀资源定位符,也就是我们说的⽹址,统⼀资源定位符是对可以从互联⽹上得到的资源的位置和访问⽅法的⼀种简洁的表⽰,是互联⽹上标准资源的地址。互联⽹上的每个⽂件都有⼀个唯⼀的 URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它。
Scrapy,Beautiful Soup, urllib,urllib2,requests
软件系统总体结构图scrapy 是⼀个快速(fast)、⾼层次(high-level)的基于 python 的 web 爬⾍构架。
⽤来下载、并解析 web 页⾯, 其 parse->yield item->pipeline 流程是所有爬⾍的固有模式。
构造形式主要分spider.pypipeline.py item.py decorator.py middlewares.py setting.py。
(1)优点:scrapy 是异步的
oraclejoinon的用法采取可读性更强的 xpath 代替正则强⼤的统计和 log 系统,同时在不同的 url 上爬⾏⽀持 shell ⽅式,⽅便独⽴调试写 middleware,⽅便写⼀些统⼀的过滤器,通过管道的⽅式存⼊数据库
(2)缺点:基于 python 的爬⾍框架,扩展性⽐较差
基于 twisted 框架,运⾏中的 exception 是不会⼲掉 reactor,并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉。
(1)scrapy 是封装起来的框架,他包含了下载器,解析器,⽇志及异常处理,基于多线程, twisted 的⽅式处理,对于固定单个⽹站的爬取开发,有优势,但是对于多⽹站爬取 100 个⽹站,并发及分布式处理⽅⾯,不够灵活,不便调整与括展。
(2)request 是⼀个 HTTP 库, 它只是⽤来,进⾏请求,对于 HTTP 请求,他是⼀个强⼤的库,下载,解析全部⾃⼰处理,灵活性更⾼,⾼并发与分布式部署也⾮常灵活,对于功能可以更好实现.
应⽤层—http ftp dns nfs
传输层—tcp --udp
⽹络层—ip icmp igmp
链路层—data link
物理层—media
设置 ip 和掩码
<pre > Ifconfig eth0 192.168.13.225 netmask 255.255.255.0
</pre>
设置⽹关
route add default gw 192.168.5.1
颜英文怎么读音发音2MSL 即两倍的 MSL,TCP 的 TIME_WAIT 状态也称为 2MSL 等待状态,当 TCP 的⼀端发起主动关闭,在发出最后⼀个 ACK 包后,即第 3 次握⼿完成后发送了第四次握⼿的 ACK包后就进⼊了 TIME_WAIT 状态,必须在此状态上停留两倍的 MSL 时间,等待 2MSL 时间主要⽬的是怕最后⼀个 A
CK 包对⽅没收到,那么对⽅在超时后将重发第三次握⼿的 FIN包,主动关闭端接到重发的 FIN 包后可以再发⼀个 ACK 应答包。在 TIME_WAIT 状态时两端的端⼝不能使⽤,要等到 2MSL 时间结束才可继续使⽤。当连接处于 2MSL 等待阶段时任何迟到的报⽂段都将被丢弃。不过在实际应⽤中可以通过设置 SO_REUSEADDR 选项达到不必等待 2MSL 时间结束再使⽤此端⼝。
1.socket 创建⼀个套接字
2.bind 绑定 ip 和 port
3.listen 使套接字变为可以被动链接
4.accept 等待客户端的链接
c语言写一个线程
(1)MSL:报⽂最⼤⽣存时间”,他是任何报⽂在⽹络上存在的最长时间,超过这个时间报⽂将被丢弃。
(2)TTL:TTL 是 time to live 的缩写,中⽂可以译为“⽣存时间”,这个⽣存时间是由源主机设置初始值但不是存的具体时间,⽽是存储了⼀个 ip 数据报可以经过的最⼤路由数,每经过⼀个处理他的路由
器此值就减 1,当此值为 0 则数据报将被丢弃,同时发送 ICMP 报⽂通知源主机。RFC 793 中规定 MSL 为 2 分钟,实际应⽤中常⽤的是 30 秒,1 分钟和 2 分钟等。TTL 与 MSL 是有关系的但不是简单的相等的关系,MSL要⼤于等于 TTL。
(3)RTT: RTT 是客户到服务器往返所花时间(round-trip time,简称 RTT),TCP 含有动态估算 RTT 的算法。TCP 还持续估算⼀个给定连接的 RTT,这是因为 RTT受⽹络传输拥塞程序的变化⽽变化。
1.添加代理
2.降低访问频率
User-Agent动态 HTML 数据加载验证码处理Cookie
HTTPS 和 HTTP 的区别:
(1)https 协议需要到 ca 申请证书,⼀般免费证书很少,需要交费。
(2)http 是超⽂本传输协议,信息是明⽂传输,https 则是具有安全性的 ssl 加密传输协议
(3)http 和 https 使⽤的是完全不同的连接⽅式⽤的端⼝也不⼀样,前者是 80,后者是 443。
(4)http 的连接很简单,是⽆状态的
(5)HTTPS 协议是由 SSL+HTTP 协议构建的可进⾏加密传输、⾝份认证的⽹络协议 要⽐http 协议安全
应⽤场合:
python基础代码大全黑客
(1)http:适合于对传输速度,安全性要求不是很⾼,且需要快速开发的应⽤。如 web 应⽤,⼩的⼿机游戏等等.
(2)https:https 应该⽤于任何场景!
优点:
1、使⽤ HTTPS 协议可认证⽤户和服务器,确保数据发送到正确的客户机和服务器;
2、HTTPS 协议是由 SSL+HTTP 协议构建的可进⾏加密传输、⾝份认证的⽹络协议,要⽐ http 协议安全,可防⽌数据在传输过程中
不被窃取、改变,确保数据的完整性。
3、HTTPS 是现⾏架构下最安全的解决⽅案,虽然不是绝对安全,但它⼤幅增加了中间⼈攻击的成本
缺点:
1.HTTPS 协议的加密范围也⽐较有限,在⿊客攻击、拒绝服务攻击、服务器劫持等⽅⾯⼏乎起不到什么作⽤
2.HTTPS 协议还会影响缓存,增加数据开销和功耗,甚⾄已有安全措施也会受到影响也会因此⽽受到影响。
3.SSL 证书需要钱。功能越强⼤的证书费⽤越⾼。个⼈⽹站、⼩⽹站没有必要⼀般不会⽤。
4.HTTPS 连接服务器端资源占⽤⾼很多,握⼿阶段⽐较费时对⽹站的相应速度有负⾯影响。
5.HTTPS 连接缓存不如 HTTP ⾼效。
HTTPS 其实就是在 HTTP 跟 TCP 中间加多了⼀层加密层 TLS/SSL。SSL 是个加密套件,负责对 HTTP 的数据进⾏加密。TLS 是SSL 的升级版。现在提到 HTTPS,加密套件基本指的是 TLS。原先是应⽤层将数据直接给到 TCP 进⾏传输,现在改成应⽤层将数据给到TLS/SSL,将数据加密后,再给到 TCP 进⾏传输。
如何申请,国内和国外有哪些第三⽅机构提供安全证书认证。
国内:
沃通(WoSign)
中国⼈民银⾏联合 12 家银⾏建⽴的⾦融 CFCA
中国电信认证中⼼(CTCA)
海关认证中⼼(SCCA)
国家外贸部 EDI 中⼼建⽴的国富安 CA 安全认证中⼼
SHECA(上海 CA)为⾸的 UCA 协卡认证体系
国外:
StartSSL
GlobalSign
GoDaddy
Symantec
区别:
get:
从指定的服务器中获取数据。
GET 请求能够被缓存
GET 请求会保存在浏览器的浏览记录中
以 GET 请求的 URL 能够保存为浏览器书签
GET 请求有长度限制
GET 请求主要⽤以获取数据
post:
POST 请求不能被缓存下来
POST 请求不会保存在浏览器浏览记录中
以 POST 请求的 URL ⽆法保存为浏览器书签
POST 请求没有长度限制
POST 请求会把请求的数据放置在 HTTP 请求包的包体中,POST 的安全性⽐ GET的⾼.可能修改变服务器上的资源的请求.
应⽤场合:
post:
请求的结果有持续性的副作⽤(数据库内添加新的数据⾏)
若使⽤ GET ⽅法,则表单上收集的数据可能让 URL 过长。
要传送的数据不是采⽤ 7 位的 ASCII 编码。
get:
请求是为了查资源,HTML 表单数据仅⽤来帮助搜索。
请求结果⽆持续性的副作⽤。
收集的数据及 HTML 表单内的输⼊字段名称的总长不超过 1024 个字符
HTTP 请求会有哪些信息发送到后台服务器。
请求⾏ (请求⽅式、资源路径和 HTTP 协议版本)POST /demo/login HTTP/1.1
请求消息头
消息正⽂(也叫实体内容) username=xxxx&password=1234
(1)从 start_urls ⾥获取第⼀批 url 并发送请求,请求由引擎交给调度器⼊请求队列,获取完毕后,调度器将请求队列⾥的请求交给下载器去获取请求对应的响应资源,并将响应交给⾃⼰编写的解析⽅法做提取处理:1. 如果提取出需要的数据,则交给管道⽂件处理;
(2)如果提取出 url,则继续执⾏之前的步骤(发送 url 请求,并由引擎将请求交给调度器⼊队列…),直到请求队列⾥没有请求,程序结束。
①scrapy 是⼀个 Python 爬⾍框架,爬取效率极⾼,具有⾼度定制性,但是不⽀持分布式。⽽ scrapy-redis ⼀套基于 redis 数据库、运⾏在 scrapy 框架之上的组件,可以让scrapy ⽀持分布式策略,Slaver 端共享 Master 端 redis 数据库⾥的 item 队列、请求队列和请求指纹集合。
②为什么选择 redis 数据库,因为 redis ⽀持主从同步,⽽且数据都是缓存在内存中的,所以基于 redis 的分布式爬⾍,对请求和数据的⾼频读取效率⾮常⾼
①使⽤⼀个具有登录状态的 cookie,结合请求报头⼀起发送,可以直接发送 get 请求,访问登录后才能访问的页⾯。
②先发送登录界⾯的 get 请求,在登录页⾯ HTML ⾥获取登录需要的数据(如果需要的话),然后结合账户密码,再发送 post 请求,即可登录成功。然后根据获取的 cookie信息,继续访问之后的页⾯。
scrapy 框架的异步机制是基于 twisted 异步⽹络框架处理的,在 settings.py ⽂件⾥可以设置具体的并发量数值(默认是并发量 16)。
项⽬问题:
①通过headers反爬⾍:解决策略,伪造headers
②基于⽤户⾏为反爬⾍:动态变化去爬取数据,模拟普通⽤户的⾏为, 使⽤IP代理池爬取或者降低抓取频率,或 通过动态更改代理ip来反爬⾍
③基于动态页⾯的反爬⾍:跟踪服务器发送的ajax请求,模拟ajax请求,selnium
和phtamjs。或 使⽤selenium + phantomjs 进⾏抓取抓取动态数据,或者到动态数据加载的json页⾯。
④验证码 :使⽤打码平台识别验证码
⑤数据加密:对部分数据进⾏加密的,可以使⽤selenium进⾏截图,使⽤python⾃带的pytesseract库进⾏识别,但是⽐较慢最直接的⽅法是到加密的⽅法进⾏逆向推理。
scrapy。
优势:
前端和后端分别部署在哪里可以实现⾼并发的爬取数据, 注意使⽤代理;
提供了⼀个爬⾍任务管理界⾯, 可以实现爬⾍的停⽌,启动,调试,⽀持定时爬取任务;
代码简洁
劣势:
可扩展性不强。
②整体上来说: ⼀些结构性很强的, 定制性不⾼, 不需要太多⾃定义功能时⽤pyspider即可, ⼀些定制性⾼的,需要⾃定义⼀ 些 功能时则使⽤Scrapy。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。