python爬虫基础
python爬虫基础
1、 HTTPS和HTTP的区别:
- https协议要申请证书到ca,需要一定经济成本
- http是明文传输,https是加密的安全传输
- 连接的端口不一样,http是80,https是443
- http连接很简单,没有状态;https是ssl加密的传输,身份认证的网络协议,相对http传输比较安全。
还有很多,自己去整理一下吧
2、 如何解决验证码的问题,用什么模块,听过哪些人工打码平台?
PIL、pytesser、tesseract模块
平台的话有:(打码平台特殊,不保证时效性)
- 云打码
- 挣码
- 斐斐打码
- 若快打码
- 超级鹰
3、 ip 被封了怎么解决,自己做过 ip 池么?
关于 ip 可以通过 ip 代理池来解决问题 ip 代理池相关的可以在 github 上搜索 ip proxy 自己选一个 去说 github.com/awolfly9/IP… 提供大体思路:
- 获取器 通过 requests 的爬虫爬取免费的 IP 代理网址获取 IP。
- 过滤器通过获取器获取的代理请求网页数据有数据返回的保存进 Redis。
- 定时检测器定时拿出一部分 Proxy 重新的用过滤器进行检测剔除不能用的代理。
- 利用 Flask web 服务器提供 API 方便提取 IP
4、Python如何爬取 HTTPS 网站?
这类问题属于简单类问题
- 在使用 requests 前加入:requests.packages.urllib3.disable_warnings()。
- 为 requests 添加 verify=False 参数
- 导入ssl模块
1 | import ssl |
5、python 爬虫有哪些常用框架?
序号 | 框架名称 | 描述 | 官网 |
---|---|---|---|
1 | Scrapy | Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。 | scrapy.org/ |
2 | PySpider | pyspider 是一个用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优先级等。 | github.com/binux/pyspi… |
3 | Crawley | Crawley可以高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。 | project.crawley-cloud.com/ |
4 | Portia | Portia是一个开源可视化爬虫工具,可让您在不需要任何编程知识的情况下爬取网站!简单地注释您感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。 | github.com/scrapinghub… |
5 | Newspaper | Newspaper可以用来提取新闻、文章和内容分析。使用多线程,支持10多种语言等。 | github.com/codelucas/n… |
6 | Beautiful Soup | Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间 | www.crummy.com/software/Be… |
7 | Grab | Grab是一个用于构建Web刮板的Python框架。借助Grab,您可以构建各种复杂的网页抓取工具,从简单的5行脚本到处理数百万个网页的复杂异步网站抓取工具。Grab提供一个API用于执行网络请求和处理接收到的内容,例如与HTML文档的DOM树进行交互。 | docs.grablib.org/en/latest/#… |
8 | Cola | Cola是一个分布式的爬虫框架,对于用户来说,只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。 | 没找着~ |
9 | 很多 | 看自己积累 | 多百度 |
6、 Scrapy 的优缺点?
优点:scrapy 是异步的
采取可读性更强的 xpath 代替正则强大的统计和 log 系统,同时在不同的 url 上爬行支持 shell 方式,方便独立调试写 middleware,方便写一些统一的过滤器,通过管道的方式存入数据库。
缺点:基于 python 的爬虫框架,扩展性比较差
基于 twisted 框架,运行中的 exception 是不会干掉 reactor,并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉。
7、 scrapy 和 request?
- scrapy 是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程, twisted 的方式处理,对于固定单个网站的爬取开发,有优势,但是对于多网站爬取,并发及分布式处理方面,不够灵活,不便调整与括展。
- request 是一个 HTTP 库, 它只是用来,进行请求,对于 HTTP 请求,他是一个强大的库,下载,解析全部自己处理,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现。
8、描述下 scrapy 框架运行的机制?
- 从 start_urls 里获取第一批 url 并发送请求,请求由引擎交给调度器入请求队列,获取完毕后,调度器将请求队列里的请求交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理,如果提取出需要的数据,则交给管道文件处理;
- 如果提取出 url,则继续执行之前的步骤(发送 url 请求,并由引擎将请求交给调度器入队列…),直到请求队列里没有请求,程序结束。
9、 实现模拟登录的方式有哪些?
- 使用一个具有登录状态的 cookie,结合请求报头一起发送,可以直接发送 get 请求,访问登录后才能访问的页面。
- 先发送登录界面的 get 请求,在登录页面 HTML 里获取登录需要的数据(如果需要的话),然后结合账户密码,再发送 post 请求,即可登录成功。然后根据获取的 cookie信息,继续访问之后的页面。
10、 你遇到过的反爬虫的策略?怎么解决?
- BAN IP
- BAN USERAGENT
- BAN COOKIES
- 验证码验证
- javascript渲染
- ajax异步传输
- 等…….
- 通过headers反爬虫:解决策略,伪造headers
- 基于用户行为反爬虫:动态变化去爬取数据,模拟普通用户的行为
- 通过动态更改代理ip来反爬虫
- 基于动态页面的反爬虫:跟踪服务器发送的ajax请求,模拟ajax请求,selnium 和phtamjs
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 藏心阁!