Python中爬虫相关面试题

本文介绍了Python爬虫的相关面试知识点,包括常用库如requests、selenium和scrapy,增量爬虫的实现,scrapy的多线程特性,中间件的开发,应对反爬策略,抓取App数据和视频的方法。
摘要由CSDN通过智能技术生成

说道Python,就不得不提——爬虫。

1.爬虫常用库

requests、selenium、puppeteer,beautifulsoup4、pyquery、pymysql、pymongo、redis、lxml和scrapy框架

  1. 其中发起请求可以使用requests和scrapy
  2. 解析内容可以用 beautifulsoup4,lxml,pyquery
  3. 存储内容可以使用 mysql(清洗后的数据) redis(代理池) mongodb(未清洗的数据)
  4. 抓取动态渲染的内容可以使用:selenium,puppeteer

2.增量爬虫

需求:

一个网站,本来一共有10页,过段时间之后变成了100页。假设,已经爬取了前10页,为了增量爬取,我们现在只想爬取第11-100页。

因此,为了增量爬取,我们需要将前10页请求的指纹保存下来。以下命令是将内存中的set里指纹保存到本地硬盘的一种方式。

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

但还有更常用的,是将scrapy中的指纹存在一个redis数据库中,这个操作已经有造好轮子了,即scrapy-redis库。

scrapy-redis库将指纹保存在了redis数据库中,是可以持久保存的。(基于此,还可以实现分布式爬虫,那是另外一个用途了)
scrapy-redis库不仅存储了已请求的指纹,还存储了带爬取的请求,这样无论这个爬虫如何重启,每次scrapy从redis中读取要爬取的队列,将爬取后的指纹存在redis中。

如果要爬取的页面的指纹在redis中就忽略,不在就爬取。

3.Scrapy 相关

scrapy基于twisted异步IO框架,downloader是多线程的。

但是,由于python使用GIL(全局解释器锁,保证同时只有一个线程在使用解释器),这极大限制了并行性,在处理运算密集型程序的时候,Python的多线程效果很差,而如果开多个线程进行耗时的IO操作时,Python的多线程才能发挥出更大的作用。(因为Python在进行长时IO操作时会释放GIL)
所以简单的说,scrapy是多线程的,不需要再设置了,由于目前版本python的特性,多线程地不是很完全,但实际测试scrapy效率还可以。

requests 是一个基本库,目前只能用来发送http请求,所以涉及爬虫的多线程或者协程需要自己定制编写

安装

pip install Scrapy

缺少twisted装不上的直接去网上下载动态库:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

新建项目

scrapy startproject 'project_name'

scrapy 配置文件

#==>第一部分:基本配置<===
#1、项目名称,默认的USER_AGENT由它来构成,也作为日志记录的日志名
BOT_NAME = 'Amazon'

#2、爬虫应用路径
SPIDER_MODULES = ['Amazon.spiders']
NEWSPIDER_MODULE = 'Amazon.spiders'

#3、客户端User-Agent请求头
#USER_AGENT = 'Amazon (+http://www.yourdomain.com)'

#4、是否遵循爬虫协议
# Obey robots.txt rules
ROBOTSTXT_OBEY = False

#5、是否支持cookie,cookiejar进行操作cookie,默认开启
#COOKIES_ENABLED = False

#6、Telnet用于查看当前爬虫的信息,操作爬虫等...使用telnet ip port ,然后通过命令操作
#TELNETCONSOLE_ENABLED = False
#TELNETCONSOLE_HOST = '127.0.0.1'
#TELNETCONSOLE_PORT = [6023,]

#7、Scrapy发送HTTP请求默认使用的请求头
#DEFAULT_REQUES
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值