概念
lxml、Beautifulsoup、正则表达式能够用于解析网页的数据。
Scrapy框架创建项目的命令格式:scrapy startproject 项目名称
redis中表示绑定主机地址的配置项是bind
在某些滑动验证码中会对用户的行为进行验证,如果滑块按照一定规律移动滑块可能不会通过滑动验证。
自定义下载中间件不需要继承Spider类,只需要process_request()方法和process_response()方法即可。
Selenium是一个开源的、便携式的自动化测试工具,它最初是为网站自动化测试而开发的,类似于我们玩游戏用的按键精灵,可以按指定的命令自动。
键值存储数据库采用键值结构存储数据,每个键分别对应一个特定的值。
Requests库既能发送网络请求,也可以通过text属性获取网页源码。
scrapy.Spider类中初始URL元组或列表的是start_urls
非关系型数据库无需事先为要存储的数据建立字段,它没有固定的结构
Scrapy自身不支持分布式,如果需要使用分布式,那么可通过Scrapy-Splash库实现分布式。
爬虫类中的name属性表示爬虫的名称。爬虫的名称必须是唯一的,不同的爬虫需要有不同的名称。
协议版本、状态码、原因短语属于状态行组成。
删除文档中一条记录的是delete_one()
下载中间件位于引擎和下载器之间。
响应内容中既可以包含文本,也可以包含图片、文件等,若需要从响应内容中提取文本,则可以使用text属性获取响应内容;
表示从节点树的某个节点开始查找,返回匹配到的第一个子节点的是find()
在Pilow.Image模块用于加载图像文件的函数是open()
网络爬虫在访问网站时,若反复使用同一IP地址进行访问,极易被网站认出网络爬虫的身份后进行屏蔽、阻止、封禁等操作
表示从集合中查找多条文档对象的是find()
HTTP请求格式中,请求行包括请求方法、URL和协议版本
Redis配置文件中,bind配置项用于指定绑定的主机地址,默认值为bind 127.0.0.1
send_keys()可以向网页的输入框传入数据
正则表达式在匹配嵌套了HTML内容的文本时,会忽略HTML内容本身存在的层次结构,而是将HTML内容作为普通文本进行搜索。
Scrapy Engine将初始URL封装成Requests交给Scheduler。
Redis中预设的数据库数量是16
整个HTML文档是一个文档节点,每个HTML元素是元素节点
HOST用于指定被请求资源的服务器主机名和端口号;Accept用于指定浏览器或其他客户端可以接受的MIME文件类型;User-Agent用于标识客户端身份
Scheduler用于将请求按照一定的方式整理入队
实体文件由Scrapy框架自动创建,无需手动创建。
用于在GET请求中传递查询字符串的是params
ITEM_PIPELINES用于设置启用管道
参数headers表示请求的请求头,该参数只支持字典类型的值
网络爬虫工作流程在待抓取URL队列中会依次读取URL,并通过DNS解析URL。
Item Pipelines组件主要用于验证抓取的数据、查重并丢弃重复数据和将数据保存到文件或数据库中,而提取响应数据则是由爬虫的parse()方法
关于Requests库验证SSL证书当请求函数中参数verify设置为True表示开启SSL证书验证,同时verify默认为True。
insert_one()表示在MongoDB中表示插入一条文档。
Scrapy-Redis并不是一个完整的框架,而是一个为了扩展Scrapy框架的分布式组件。
通用网络爬虫会先从一个或多个初始URL开始,获取初始URL对应的网页数据。
BeautifulSoup使用CSS选择器的方法是select()
Requests库中get()函数只能发送GET请求
Scrapy-Redis项目中使用管道存储数据时,必须在管道类中实现的方法是process_item()
聚焦网络爬虫面向有特殊需求的人群,它会根据预先设定的主题顺着某个垂直领域进行抓取,而不是漫无目的地随意抓取。
pytesseract属于Python对Tesseract-OCR封装的库
字符串、哈希、列表、集合属于Redis数据库键的类型
find_element(By.ID, ID属性值);find_element(By.CLASS_NAME, class属性值);
Spiders用于处理Responses并从中提取Items封装数据的组件
Beautiful Soup会将整个节点树中的每个节点看作一个Python类的对象。
get()函数和post()均可以通过参数proxies设置使用的代理IP。
update_one()表示更新文档中一条记录
html解析中,html5lib是容错性最好的解析器
set()、append()在redis模块中可以增加键值对
Item Pipeline、Spiders在抓取数据时,需要开发人员进行编写的组件
验证抓取的数据、查重并丢弃重复数据、将数据保存到文件或数据库中属于Item Pipeline组件应用
Scrapy-Redis中Spiders组件不再使用Scrapy原有的Spider类表示爬虫,而使用重写的RedisSpider类
每个管道其实是一个独立的Python类,该类中有3个核心方法:process_item()、open_spider()和close_spider(),其中process_item()方法是必须实现的
Scrapy Engine、Scheduler、Downloader组件的业务逻辑是由框架写好的,无需开发人员进行任何修改。
Scrapy无法获取采用JavaScript技术进行动态渲染的页面内容,需要通过Scrapy-Splash库解决了Scrapy框架不支持JavaScript动态渲染的问题等。
POST请求的请求参数不会暴露在URL地址中。
post()函数中参数data的值的类型可以是字典、字节序列和文件对象。
使用Beautiful Soup解析网页,需要先使用构造方法创建一个BeautifulSoup类的对象。
URL地址的作用是用于指定因特网上某个资源的位置
通过Scrapy-Redis库 可以解决Scrapy框架不支持分布式爬虫的问题
alowed_domains属性用于设置爬虫搜索的域名范围
Response类中text和content属性 都可以获取响应内容
如果希望禁用某个下载中间件,那么可以将该中间件对应的值设置为None
XPath可以从HTML或XML格式的数据 中提取所需的数据。
响应信息由状态行、响应头、空行和响应正文组成。
分布式爬虫是指多个爬虫任务可以用多台机器同时运行。
在scrapy.Spider类中用于解析Response的方法是parse()
使用Selenium的目的是抓取动态网页数据 。
Item Pipeline组件的功能代码位于Scrapy项目的pipelines.py文件 中。
文档 是MongoDB数据库的基本数据组织单元。
通过WebDriver类的curent_url 属性可以获取当前URL地址。
Spider类中name属性用于设置爬虫的名称。
Downloader 负责下载由Scrapy Engine发送的所有请求,并将其获取到的Responses交还给Scrapy Engine。
自定义下载中间件需要使用process_request()方法和process_response()方法。
Session类负责的管理会话对HTTP协议或HTTPS协议没有限制。在Requests库中通过Session类实现会话保持。
MongoDB属于典型的文档型数据库。
使用Response类的headers属性可以获取响应头。
lxml库中,大多数有关解析的功能都封装在etree 模块。
Scrapy的运作流程由Engine控制
scrapy.Spider是Scrapy中提供的爬虫基类,我们创建的爬虫类都需要从该类继承
使用re模块中的compile()函数可以对正则表达式进行预编译
激活下载中间件需要将自定义的中间件添加到配置项DOWNLOADER_MIDDLEWARES 中。
Scrapy框架中spiders目录用于存放爬虫代码。
Requests中get()函数或post()函数通过参数proxies设置代理IP。
HTTP请求由请求行、请求头部、空行、和请求体组成。
在Selenium中,webdriver.support.ui模块的WebDriverWait类用于处理显式等待。
在XPath中,路径表达式使用@来选取属性。
使用Python开发网络爬虫程序的流程大致分为抓取网页数据、解析网页数据和存储网页数据
redis模块中使用get()方法根据指定的键查询该键对应的值。
隐式等待通过WebDriver类中的implicitly_wait方法实现。
MongoDB默认端口号是27017
Scrapy框架中使用集合实现请求的去重功能。
爬虫的基本概念、原理
网络爬虫的基本工作原理
网络爬虫是按照一定规则,模拟浏览器访问Web站点的行为,对Web站点的数据进行自动抓取的一种计算机程序。
浏览器访问网页的过程:客户端通过浏览器地址栏提交url,若url包含有域名,则需要先进行域名解析,得到服务器IP后,向服务器发起TCP连接请求,经三次握手确认建立连接,连接成功后服务器向客户端返回一个包含网页内容的响应包,客户端收到后解包并通过浏览器进行渲染和显示。
网络爬虫的四种类别
网络爬虫按照系统结构和实现技术大致可以分为:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。
通用网络爬虫和聚焦网络爬虫的区别
通用网络爬虫会抓取互联网上所有网页的数据,耗费的时间和资源比较长,主要用在搜索引擎中。
聚焦网络爬虫只抓取与特定主题相关的网页,并对抓取的数据进行筛选,耗费的时间和资源相对较少。
编写网络爬虫的步骤
1)分析网站结构,确定网页类型
2)选择并安装需要的第三方库
3)抓取网页内容
4)解析网页以提取数据
5)存储数据
网络爬虫的应用
网络爬虫的核心应用包括:数据采集与分析,为大数据建模、市场调研提供数据源;搜索引擎构建,支撑百度、谷歌等平台的网页抓取与索引;行业信息监测,助力金融、电商等领域追踪市场动态与竞品信息;内容聚合与创作,为资讯平台、自媒体提供素材;科研与学术研究,为各学科课题提供研究数据;自动化办公,替代人工完成信息搜集,提升工作效率。同时,爬虫应用需遵守法律法规与网站协议,确保合规采集。
robots协议的作用及常用选项的含义,会解读robots协议内容
robots协议的作用:约定网站上哪些数据是可爬取的,哪些数据是不可爬取的。
常用选项的含义:User-Agent规定了允许访问该网站的爬虫
Disallow规定了禁止爬虫访问的网站目录或文件
Allow规定了允许爬虫抓取的网站目录或文件
http请求、http响应包含哪几个部分
Http请求信息包含请求行、请求头、空行、请求体。
Http响应信息包括响应行、响应头、空行、响应体。
常见响应状态码的含义
200 表示访问请求获得了正常的响应
404 请求访问的页面不存在
302 发生了url重定向,跳转到一个新的url访问
HTTP请求类型有哪些?
包含GET、HEAD、POST、PUT、DELETE、TRACE、OPTIONS、CONNECT等八种访问请求。
GET请求和POST请求的区别
(1)GET请求用于向服务器发起获取网页或其它文件的请求,只适合传递少量数据;POST请求常发生在以表单等形式提交数据给服务器时,适合于传递大量数据。
(2)GET请求通过url地址中的连接串提交数据的方式不安全,POST请求提交的数据放在请求体中,相对安全。
(3)GET请求可以被缓存在浏览器的历史记录中,而POST请求不会被缓存。
常用的反爬和反爬爬
(1)常用的反爬措施
1)通过请求头反爬
2)通过访问频率封禁IP反爬
3)通过访问权限反爬
4)通过js脚本反爬
5)通过字符验证码、图片验证码、滑动验证等方式反爬
(2)常用的反反爬措施
1)设置请求头,加入user-agent等字段;
2)设置延时等待降低访问频率;
3)设置代理IP(避免反复使用同一个IP抓取数据);
4)使用从浏览器登陆网站后的cookies;
5)通过数据抓包工具获取访问接口或者采用动态网页爬虫第三方库;
6)模拟验证操作。
cookie和session的区别,以及它们之间的交互过程。
cookie和session是用于保持Http连接状态的技术,它们主要区别在于session存在于服务端 ,session为了保持会话控制,而存储了维持会话所需要的信息,而cookie存在于客户端 ,是一段不超过4kB的小型文本数据,由一个名称和一个值用于控制cookie有效期、安全期、使用范围的可选属性组成,其中包含由服务器发来的用于验证客户端身份的信息。
开发者可以通过修改max-age属性的值延长Cookies的有效期。
数据保存在cookie中时通常会加密。
session和cookie的工作过程如下:
1)客户端发送访问请求给服务器;
2)服务器接收到请求后,创建一个session(会话),并发送一个包含sessionId的响应包给客户端;
3)客户端将服务器发来的信息中用来表示用户状态或身份的部分以cookie存放在本地,后面再次发起访问请求时在请求头中添加该cookie。
4)服务器端收到客户端发来的包含sessionId的cookie后,会将sessionId和服务器端记录的进行核对验证,验证通过后再将响应包发回给客户端。
网页内容下载和数据提取
抓取网页内容的常用方法有哪几个
(1)使用内置库urllib或第三方库urllib3
(2)使用第三方库requests
解析网页提取数据的常用方法有哪几个
(1)使用正则表达式 (注意常用元字符的含义)
(2)使用xpath
(3)使用Beautiful Soup
爬虫发出HTTP访问请求时通过什么伪装成浏览器访问网页
user-agent是标识浏览器身份的请求头字段,通过设置headers参数中的user-agent字段值为浏览器的user-agent值,可以将爬虫伪装成浏览器。
urllib库包含哪几个模块
(1)request
(2)parse
(3)robotparser
(4)error
urllib库常用的几个函数
(1)urlopen
(2)urlretrieve
(3)urlencode
(4)urlparse
使用urllib和requests库发出get请求或post请求,通过什么参数可以提交数据给服务器?
(1)使用urllib发出get请求时,通过参数url可以提交数据给服务器。
(2)使用urllib发出post请求时,通过参数data可提交数据给服务器。
(3)使用requests库发出get请求时,通过参数params可以提交数据给服务器。
(4)使用requests库发出post请求时,通过参数data可以提交数据给服务器。
在requests库中,参数headers、proxies、cookies的作用
headers参数用于设置请求头,伪装成浏览器或传递认证信息。
proxies参数用于设置代理服务器,避免频繁访问目标网站而导致IP受限。
cookies参数用于设置Cookies,以保持会话或登录的状态。
使用requests库发起访问请求后获得的响应对象的常用属性
使用requests库发起访问请求后获得的响应对象的常用属性:status_code、content、text、encoding、...
status_code表示响应状态。(注意使用urllib库发起请求时的响应状态是通过status获得)
content得到响应体的字节数据。
text得到解码后的字符串数据。
encoding表示对响应体解码使用的编码
使用requests库抓取网页内容后,通过content属性访问到的字节码需经过decode方法解码后才能得到源码字符串。
使用requests库访问网页抓取网页源码的过程
(1)安装requests库;
(2)导入requests库;
(3)使用get方法、post方法或request方法向目标网页发起访问请求;
(4)为响应对象的encoding属性设置自动解码使用的编码,通过text属性获得网页源码。
正则表达式的基本用法
常用元字符的含义
? 匹配前导字符0次或1次
- 匹配前导字符任意次
- 匹配前导字符1次及以上
{n}匹配前导字符n次
{n,m}匹配前导字符n到m次
XPATH的基本用法
(1) lxml 中大部分的功能都位于lxml.etree模块中,常用from lxml import etree导入etree模块。
使用etree.HTML(HTML源码)可得到DOM树结构的根结点。
也可使用from lxml.html import fromstring导入fromstring函数,通过lxml.html.fromstring(HTML源码)获得DOM树结构的根结点。
(2)定位元素的xpath表达式写法
XPath中用表达式 .// (或 descendant:😗)表示从当前节点开始选取后代节点。
(3)通过lxml库的xpath表达式如何获取标签的属性
使用@,如获得class属性的值使用@class
(4)常用的功能函数和运算符,如
text()方法的作用:1)提取节点的文本内容;2)选取包含指定文本内容的标签
string(.)方法的作用:获取标签及其各级子标签下的文本
contains()方法的作用:用于选取属性值或文本中包含指定字符串的标签
starts-with()方法的作用:用于选取以指定字符串开头的节点
ends-with()方法的作用:用于选取以指定字符串结尾的节点
and的作用:用于选取同时满足两个过滤条件的节点
...
Beautiful Soup的使用步骤
(1)根据HTML或 XML文档(或片段)创建一个 BeautifulSoup类的对象。
(2)通过BeautifulSoup 类的对象的查询方法或CSS选择器定位节点。
(3)通过访问节点的属性或节点的名称进行提取节点内容。
动态网页爬虫
selenium浏览器驱动对象的常用属性和方法
通过page_source属性可获得HTML源码。
通过current_url可获得当前访问的url。
通过get方法向目标网页发起访问请求
selenium库定位节点的常用方法
(1)通过标签的id属性定位
find_element(By.ID, id属性的值)
find_elements(By.ID, id属性的值)
(2)通过标签的class属性定位
find_element(By.CLASS_NAME, class属性的值)
find_elements(By.CLASS_NAME, class属性的值)
(3)通过XPath定位
find_element(By.XPATH, xpath表达式)
find_elements(By.XPATH, xpath表达式)
(4)通过name属性值定位
find_element(By.NAME, name属性的值)
find_elements(By.NAME, name属性的值)
(5)通过标签名定位
find_element(By.TAG_NAME, 标签名称)
find_elements(By.TAG_NAME, 标签名称)
... ...
使用selenium时,WEB元素的四大操作:点击click()、输入send_keys()、获取属性值get_attribute()、获取文本text。
selenium中三种延时等待方法的区别
分别为强制等待、隐式等待、显式等待。
强制等待使用time模块的sleep函数,要求等待的时间到了才能继续执行后面的操作;
隐式等待使用浏览器驱动对象的implicitly_wait方法,指定等待整个页面加载完成的时间(也就是一个全局最大等待时间),若页面在等待时间内未加载完,将继续执行后续操作,此时后面需访问的元素可能仍未出现,而且等待整个页面加载完成需要的时间通常比等待单个元素出现需要的时间要长;
显式等待使用WebDriverWait类的对象的until方法,可设置当某个条件(如当元素出现或者元素可见)满足时即可继续执行后续操作,这种等待方式需要的时间比较短,但需要导入一个类和一个模块,且需要使用css选择器、xpath等限定等待的元素,写起来相对比较复杂。
presence_of_element_located方法用于判断一个元素是否被加载到DOM中,该元素已被加载到DOM中时不一定可见;visibility_of_element_located方法用于判断某个元素是否被加载到DOM中并且可见。
selenium中switch_to.window()和switch_to.frame()的区别是什么
switch_to.window()用于从一个浏览器窗口切换到另一个窗口,switch_to.frame()用于从同一个页面中的一个框架切换到另一个框架。
数据存储
MongoDB、redis中的基本概念、数据存储形式、基本操作
MongoDB是文档数据库;redis是键值对数据库、内存数据库。
MongoDB可以键值对存储数据,其存储形式类似于字典。
基本操作:掌握连接数据库、创建数据库、创建集合、插入文档到集合、在集合中查找文档、修改文档、删除文档等操作
pymongo 模块中使用了 4 个对象与 MongoDB 数据库进行交互,分别 MongoClient 对象、DataBase 对象、Collection 对象和 Cursor 对象。
redis数据库的基本操作
(启动服务redis-server、启动执行redis命令的客户端redis-cli、Python创建到redis数据库的连接、创建列表及放数据到列表中、创建哈希表并设置键值对)
MongoDB默认的端口号为27017
redis默认的端口为6379
验证码识别
滑动拼图验证的识别思路
(1)获取抠图和包含缺口的背景图片;
(2)计算滑块的偏移量;
(3)生成滑动轨迹;
(4)使用Selenium模拟滑块滑动;
(5)验证抠图与缺口位置是否重合。
注意:selenium只是进行字符码验证时使用的一种自动化工具,本身并不能实现验证码识别。
scrapy框架
scrapy框架中五大组件和两类中间件的作用
五大组件的作用:
(1)引擎组件是整个框架的核心,负责控制数据流在系统中的所有组件中的流动;
(2)调度器组件负责接收Engine发送过来的请求,并按照一定的顺序和方式排队、调度这些请求;
(3)爬虫组件负责从响应对象中提取数据、对数据进行封装并提交,以及生成新的请求;
(4)管道组件负责处理Spider返回的Item,进行数据清洗、验证、持久化存储等操作;
(5)下载组件负责下载网页并返回响应对象。
中间件的作用:
(1)爬虫中间件可以处理爬虫传递给引擎的请求和数据项、引擎传递给爬虫的响应;
(2)下载中间件可以通过设置或更换User-Agent、添加IP代理、更换Cookies等实现反反爬,还可通过自动重试、请求去重增强爬虫的鲁棒性,提高爬取的效率。
Scrapy框架开发爬虫程序的步骤
(1)创建scrapy工程
(2)在scrapy工程中创建爬虫
(3)创建一个可执行爬虫的模块文件(可选)
(4)定义item结构用于存储爬虫提取的数据
(5)在爬虫组件的parse方法中从响应对象的响应体中提取数据,封装在item结构中并提交给管道
(6)创建中间件(可选)
(7)在管道组件中实现对数据的存储
(8)在设置文件settings.py中修改或设置参数
创建scrapy工程、创建和运行爬虫的命令
使用scrapy startproject 命令创建scrapy工程。
使用scrapy genspider命令创建爬虫。
使用scrapy crawl命令运行爬虫
Scrapy工程中settings.py的作用,其中几个常用全局变量如USER_AGENT、DOWNLOAD_DELAY、ROBOTSTXT_OBEY等的作用是什么
settings.py用于设置与scrapy四大组件以及两类中间件相关的参数
USER_AGENT用于设置一个全局的User-Agent
DOWNLOAD_DELAY用于设置下载延时,表示对同一个页面的两次访问请求之间的时间间隔
ROBOTSTXT_OBEY用于设置是否遵守robots协议,设为True表示遵守,在发出访问请求时,scrapy会对网站robots协议进行解析,并检测当前请求的资源是否为robots协议许可,若不允许访问,则停止提交请求;设为False表示不遵守robots协议,scrapy将不对发出的请求进行检查
简答
请简述安装Webdriver的目的
Selenium不支持浏览器的功能,需要与第三方浏览器结合在一起才能使用,通过WebDriver可以实现Selenium驱动第三方浏览器,WebDriver在Selenium
和第三方浏览器起到桥梁作用。
请简述防爬虫应对策略有哪些
网络爬虫采取一些应对策略继续访问网站,常见的应对策略包括添加User-Agent字段、降低访问频率、设置代理服务器 、识别验证码。
请简述Scrapy框架的运作流程
(1)Scrapy Engine从Spiders中获取初始URL。 (2)Scrapy Engine将初始URL封装成Requests交给Scheduler。 (3)Scheduler将下一个请求交给Scrapy Engi
ne。 (4)Scrapy Engine将请求通过Downloader Middlewares转交给Downloader。 (5)页面完成下载后,Downloader生成一个该页面的响应,并将该响应通
过Downloader Middlewares交给Scrapy Engine。 (6)Scrapy Engine从Downloader中接收到响应,并通过Spider Middlewares转交给Spiders进行处理。
(7)Spiders处理响应,并将处理后的Items或新请求交给Scrapy Engine。 (8)Scrapy Engine将处理后的Items交给Item Pipeline,将新请求交给Scheduler。
请简述聚焦网络爬虫的工作原理。
(1)根据需求定义好聚焦网络爬虫的采集目标,以及进行相关的描述。 (2)获取初始URL。
(3)根据初始URL抓取页面,并获得新URL。
(4)从新URL中过滤掉与采集目标无关的URL。
(5)将过滤后的URL放到URL队列中。
(6)根据一定的爬行策略,从URL队列中确定URL优先级,并确定下一步要
抓取的URL。
(7)从下一步要抓取的URL中读取新URL,根据新URL抓取网页。
(8)若聚焦网络爬虫满足设置的停止条件,或没有可获取的URL时,停
止采集;若网络爬虫没有满足设置的停止条件,则继续根据新URL抓取对应的网页,并重复步骤(3)~(8)
请简述Settings组件的作用
Settings组件用于定制Scrapy中所有组件的行为,包括核心组件、扩展组件、管道以及Spiders组件等。settings.py是Scrapy项目的标准配置文件,该文件是Settings组件应用的地方,用于为Scrapy项目添加或更改配置
请简述HTTP响应格式的结构
HTTP响应是指从服务器端到发送给客户端的响应信息,它由状态行、响应头、空行、以及响应正文四部分组成。
请简述解析网页数据常用的技术方案
Python中提供了多种解析网页数据的技术方案,包括正则表达式、Xpath 、Beautiful Soup、JSONPath,其中正则表达式是一种文本模式,这种模式描述了匹配字符串的规则,用于检索字符串中是否有符合该模式的子串,或者将匹配到的子串进行替换;XPath是XML路径语言,用于从HTML或XML格式的数据中提取所需的数据;Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库;JSONPath的作用类似XPath,它也是以表达式的方式解析数据的,但只能解析JSON格式的数据
请简述Beautifu Soup的使用步骤
BeautifulSoup 的用法非常简单, 一般分为如下3个步骤。
(1)根据HTML或XML文档或片段创建一个BeautifulSoup类的对象。 (2)通过BeautifulSoup类的对象的查询方法或CSS选择器定位节点。
(3)通过访问节点的属性或节点的名称进行提取节点内容。
请简述下载中间件和爬虫中间件的作用
Downloader Middlewares(下载中间件)用于自定义扩展下载功能的组件,位于Downloader和Scrapy Engine之间;Spider Middlewares(爬虫中间件)用于自定义扩展Scrapy Engine和Spiders中间通信的功能组件,位于Spiders和Scrapy Engine之间。
请简述设置代理服务器的作用
代理服务器的作用是防止本地IP被封。代理服务器介于客户端和服务器之间,这样网站识别的IP地址为代理服务器的IP地址,而不是客户端的真实IP地址,另外我们还可以每隔一段时间更换一次代理服务器。
请简述Scrapy框架中Spiders组件的作用
Spiders组件负责处理所有的Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler。
请简述HTTP请求格式的结构
HTTP请求是指从浏览器到服务器端的请求信息,它由请求行、请求头部、空行、以及请求数据(有的也称为请求体)四部分组成。
请简述使用Selenium实现滑动拼图验证码的实现思路
使用Selenium实现滑动拼图验证码的实现思路具体如下。
(1)获取包含缺口和不包含缺口的背景图片。
(2)计算滑块的偏移量。
(3)生成滑动轨迹。
(4)使用Selenium模拟滑块滑动。
(5)验证抠图与缺口位置是否重合。
请简述Selenium中的隐式等待和显式等待
隐式等待就是设置一个全局的最大等待时间。在定位元素时,对所有元素设置超时时间,超出了设置时间则抛出异常;显式等待指定某个条件,然后设置
最长等待时间。如果这个时间结束时还没有找到元素,那么便会抛出异常了。
请简述浏览器访问百度首页的加载过程
当我们在地址栏输入百度官网地址后,浏览器首先通过DNS(Domain Name System,域名系统)服务器查找百度服务器对应的IP地址;接着浏览器向IP地址对应的Web服务器发送HTTP请求;然后Web服务器接收HTTP请求后进行处理,向浏览器返回HTML页面;最后浏览器对HTML页面进行渲染呈现给用户。