爬虫(三)爬虫基础题整理回顾

419次阅读
没有评论
爬虫(三)爬虫基础题整理回顾

目录

1.当输入一个类似www.baidu.com的网址时,返回页面的过程发生了什么?

2.Scrapy框架是如何进行二次请求的,参数有哪些,各代表什么含义?

3.scrapy框架的中间件有几种,简单介绍其中的一个的使用?

4.re模块中,match findall search 的区别?

5.写出创建一个scrapy项目到执行的命令,以百度为例

6.scrapy的优缺点?

7.请说明HTTP状态码的用途,请说明常见的状态码机器意义?


1.当输入一个类似www.baidu.com的网址时,返回页面的过程发生了什么?

(1)浏览器向DNS服务器发送www.baidu.com域名解析请求

(2)DNS服务器返回解析后的ip给客户端浏览器,浏览器向该ip发送页面请求

(3)服务器接收到请求后,查询该页面,并将页面发送给客户端浏览器

(4)客户端浏览器接收到页面后,解析页面中的引用,并再次向服务器发送引用资源请求;

(5)服务器接收到资源请求后,查找并返回资源给客户端

(6)客户端浏览器接收到资源后,渲染,输出页面展现给用户

 

2.Scrapy框架是如何进行二次请求的,参数有哪些,各代表什么含义?

yield scrapy.Request(url=detail_url,callback=self.parse_detail,mete={'data':item},encoding='utf-8',dont_filter=True)

url = detail_url 传递二次访问页面的url

callback=self.parse_detail 处理二次返回的解析函数

meta = {'data':item} 将一层所需数据传递到二层函数

encoding='utf-8' 编码

dont_filter=True 这个URL不参与去重

 

3.scrapy框架的中间件有几种,简单介绍其中的一个的使用?

(1) Spider Middleware  和 Downloader Middleware  

(2)Downloader Middleware 有以下几个函数被管理

process_request  request通过下载中间件时,该方法被调

process_response 下载结果经过中间件时被此方法处理

process_exception 下载过程中出现异常时被调用

4.re模块中,match findall search 的区别?

(1)match re.match(pattern,string[flags])   

从首字母开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败返回None,若要完全匹配,pattern要以$结尾

(2)search   re.search(pattern,string[flags])  

若string中包含pattern子串,则返回search对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个

(3)findall   re.findall(pattern,string[flags])

返回的string中所有与pattern相匹配的全部子串,返回形式为数组

 

5.写出创建一个scrapy项目到执行的命令,以百度为例

创建:

scrapy startproject baidu

cd baidu

scrapy genspider bd baidu.com

启动:

scrapy crawl bd

 

6.scrapy的优缺点?

优点:

(1)scrapy是异步的

(2)采取可读性更强的xpath代替正则

(3)强大的统计和log系统

(4)同时在不同的url上爬行

(5)支持shell方式,方便独立测试

(6)有middleware 方便写统一的过滤器

(7)通过管道的方式存入数据库

缺点:

(1)基于python的爬虫框架,扩展性比较差

(2)基于twisted框架,运行中的exception是不回干掉reactor(反应器),并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉

 

7.请说明HTTP状态码的用途,请说明常见的状态码机器意义?

通过状态码告诉客户端服务器的执行状态,以判断下一步该执行什么操作。

常见的状态机器码有:

100-199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程

200-299:表示服务器成功接收请求并已完成处理过程。常用200(请求成功)

300-399:为完成请求,客户需要进一步细化请求。302(所有请求页面或已经临时转移到新的url)304/307(使用缓存资源)

400-499:客户端请求有错误。403(服务器拒绝访问,权限不够) 404(服务器无法找到被请求页面)

500-599:服务器端出现错误。500(请求未完成,服务器遇到不可预知的情况)

 

 

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-28发表,共计1985字。
新手QQ群:570568346,欢迎进群讨论 Python51学习