- 常用网络数据爬取方法
urllib
正则表达式
Beautiful Soup
Selenium
Scrapy
Lxml - 常见的反爬手段与应对方法
- 反爬手段:headers字段(User-Agent字段、过referer字段、cookie)
解决方法:在爬虫中添加Headers,浏览器的User-Agent复制到爬虫的Headers中,将Referer值修改为目标网站域名。 - 反爬手段:js(跳转、生成了请求参数、数据的加密)
解决方法:selenium+phantomJS框架,调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。 - 反爬手段:IP地址
解决方法:IP代理,随机间隔几秒。 - 反爬手段:验证码
解决方法:cookie登录、打码平台、selenium 模拟 - 反爬手段:css(利用css掩盖真实数据)
解决方法:找到被替换文本和顺序、重排文本、对原文中span标签根据class序号进行替换。
- 数据去重,清洗,存入数据库
- set()
- 数据库唯一约束
- Scrapy内置的url去重方法
- 正则表达式
- 编写代码清洗数据
- 数据库存储后清洗
- Scrapy的基本结构
引擎(Scrapy)
调度器(Scheduler)
下载器(Downloader)
爬虫(Spiders)
项目管道(Pipeline)
下载器中间件(Downloader Middlewares)
爬虫中间件(Spider Middlewares)
调度中间件(Scheduler Middewares) - Scrapy运行流程
1.引擎从调度器中取出一个URL用于抓取
2.引擎把URL封装成一个Request给下载器
3.下载器把资源下载并封装成Response
4.爬虫解析Response
5.解析出Item交给管道进一步处理
6.解析出URL把URL交给调度器等待抓取 - Scrapy几种中间件
- 下载器中间件(Downloader Middlewares):请求到网页后,页面被下载时进行处理
- 爬虫中间件(Spider Middlewares):在爬虫运行中进行一些处理
- 调度中间件(Scheduler Middewares)
- 代理怎么使用
可以放在一个列表中,随机选择一个代理去访问网站。 - 同步和异步
- 线程方面:
同步:多个线程同时访问同一资源,等待访问结束,浪费时间、效率低下。
异步:在访问资源的时,在空闲等待时可以同时访问其他的资源。 - 网络方面:
同步:提交请求→等待服务器处理→处理完毕返回 期间客户端浏览器不能做任何事情。
异步:事件触发请求→服务器处理→处理完毕 期间浏览器可以做其他事情。
- 链表和顺序存储
- 顺序存储:
原理:数据存储在一块连续的内存空间。
优点:存储效率高、速度快、通过下标直接存储。
缺点:插入删除慢、不可以增长长度。 - 链表存储
原理:动态分配空间,存储器有空间就不会发生存储溢出。
优点:插入删除速度快、保留物理顺序,更改只需改变指针指向。
缺点:查找需要循环链表,速度慢。