- A+
1.如何分析一个网页
1):查看网页源代码中是否有我们需要的数据
2):如果 1)中没有,抓包,分析所有的包,看看哪个包中有我们需要的数据
3):如果 1),2)中都没有,可以使用selenium配合phantomjs解析
2.抓取工具:
1):urllib2
2):requests
3):scrapy
以上三个类库或框架用于抓取数据,拿到的都是网页源代码
3.解析网页源代码
1)正则表达式
2)xpath
3)bs4
用来根据网页源代码提取我们需要的数据
4.入库
mysql、mongodb
mysql里面存储过程、事务
只要涉及到并发,不能再使用id自增的方式,应该使用UUID,一般在表中配备一个日期类型的字段
5.应对反爬机制
1)headers的使用
2)代理IP,休眠
3)ocr验证码,如果说我们不涉及登录验证码,而且是爬取的过程中出现的验证码不能被ocr识别的时候,我们最终的解决方案是 2)
如果说我们需要破解登录的验证码,
a.人工打码
b.提供前端html页面,由用户输入
c.机器训练
4)简单ocr破解之后,拿到cookie,然后携带cookie再去访问当前页面,意味我们从浏览器数据验证码以后得到的那个页面
6.cookie的使用
1)模拟用户登录,登录成功后,拿到cookie,然后携带cookie请求类似于个人主页,信息修改的页面,模拟真实浏览器的实际操作
2)应对ocr之后的cookie,模拟浏览器请求
7.分布式
1)只要涉及到高并发,通常使用分布式的解决思路,来解决问题
requests celery+rabbitmq 多进程+协程的方式来构建分布式,这个思想完全可以应用在web当中,来构建webapi
url去重时:mysql、mongodb物理表去重,redis,list
redis去重的有点:速度快,减少的是由硬盘到内存的IO操作时间,缺点在于,如果没有存入硬盘,当服务器重启的时候,所有的url将消失
2)scrapy构建分布式的时候,我们采用了scrapy-redis的理念,将所有的url存放于redis中,做url去重,也可以采用mysql、mongodb等方式用于url去重操作