一.什么是网络爬虫?
爬虫涉及到几个方面的知识:
1.编写代码基础能力(系列一的课程)
2.HTTP/HTTPS的基础知识
3.xpath/beatifulSoup等解析网页内容
4.re正则表达式
5.数据库mysql基础学习
6.网页基本结构
7.涉及到数据清洗(NLP自然语言处理,一些简单算法设计——比如simhash进行文章去重)
二.爬虫和反爬虫的持续战斗
有爬虫,就有反爬虫
爬虫工程师(我们),反爬(网络管理人员)之间的持续战斗:
小白,他学习了怎么写爬虫,于是访问一个网站,1秒访问1000次;
小黑(网管)发现有个明显的爬虫,访问的User-Agent是python3,直接封掉;
小白发现爬虫被封,知道UA没写,接下来访问带上UA,1秒访问1000次;
小黑(网管)发现ip1秒访问1000次,好像是机器在操作,封掉ip;
小白发现ip被封,然后使用ip代理,继续访问;
小黑(网管)发现网站流量还是扛不住,应该有很多可恶的爬虫,增加部分关键数据的登陆访问;
小白发现需要登陆才能访问,那么多申请一些账号,搞一个账号池(cookie池),继续访问网站;
小黑(网管)发现网站流量还是扛不住,我加一个验证码;
小白发现需要验证码才能访问,接入打码平台,或者机器学习训练模型,识别验证码,照样爬数据(对于超级超级复杂的验证码,请真正的人工智能(大妈)来识别);
小黑(网管)发现网站流量还是扛不住,给前端沟通,数据不要直接请求就能获得,要使用ajax加载数据;
小白发现需要加载js,直接使用无头浏览器;
小黑说,大哥,饶了我吧,成本太高,搞不起;
UA——访问来源的鉴定标志
ip——(默默的等待,让程序跑一会)豆瓣站点封ip
登陆——小红书APP
验证码——12306
ajax加载数据——
2种方式
简单一点:无头浏览器,直接使用selenium+phantomjs(或者其他浏览器的无头模式)
难一点:一步一步跟踪js的堆栈信息,找出计算方式,执行js代码
app端参数加载加密
app端返回数据端上加密
import requests
def crawl_douban_demo():
while True:
response = requests.get('https://movie.douban.com/subject/26715636/')
print(1)
pass
crawl_douban_demo()
三.HTTP基础知识
HTTP协议;(TCP/IP书籍)
四层——应用层(FTP,DNS,HTTP),传输层(TCP,UDP),网络层(IP),数据链路层(链接网络的硬件设备,网卡光纤等)
ftp:文件协议
DNS:域名解析,可以将ip地址和url地址互换,
39.156.66.18<——>www.baidu.com互换
HTTP:超文本传输协议