网络爬虫
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。
爬虫的基本流程分析网站,得到目标url根据url,发起请求,获取页面的HTML源码从页面源码中提取数据
a.提取到目标数据,做数据的赛选和持久化存储
b.从页面中提取到新的url地址,继续执行第二部操作 爬虫结束:所有的目标url都提取完毕,并且得到数据了,再也没有其他请求任务了,这是意味着爬虫结束
发起一个请求的基本流程
1、当用户 在浏览器的地址栏中输入一个URL并按回车键之后(会先经过DNS服务将域名解析为ip),浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。
2、当我们在浏览器输入URL http://book.douban.com 的时候,浏览器发送一个Request请求去获取 http://www.book.douban.com 的html文件,服务器把Response文件对象发送回给浏览器。
3、浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
4、当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来
请求状态码:200:请求成功
301:永久重定向
302:临时重定向
400:客户端错误
401:未授权
403:服务器拒绝访问
404:页面未找到
405:请求方式不对
408:请求超时
500:服务器错误
503:服务器不可用
Response对象
Response.json():获得json格式网页数据;Response.text:获得html网页数据;Response.content:获得网页二进制文件数据,常常用该方法爬取图片、视频等数据;Response.encoding:更改网页数据的编码方式,除非使用Response.text得到的html中文是乱码的,否则一般不用;
Respomdes.status_code:查看当前访问的状态码。
以上方法,最常用的是text和json方法,风别对于html网页和json网页数据
path与lxml
xpath:可以在xml中查找信息,对xml文档中的元素进行属性的提取
xml:设计目的是为了传输数据,结构和html相像,是一种标记语言
xpath常见语法:
nodename : 选取此节点的所有子节点
/ : 从根节点开始查找
// : 匹配节点不考虑节点的位置
. : 选取当前节点
.. : 选取当前节点的父节点
a/@href : 取标签数据
a/text() : 取标签文本
a[@class='123'] : 根据class属性寻找标签
a[@id='123'] : 根据id属性寻找标签
a[@id='123'][last()] : 取最后一个id为123 的 a标签
a[@id='123'][postion()<2] : 取前两个id为123的 a标签
如何防止反爬
1.控制访问频率,time.sleep(1)1s一次访问
2.伪装装成浏览器,或者直接用selenium
3.使用代理ip(速度并不快,还要花钱),可以用手机网络开热点,飞行模式开启后,手机的ip就切换成新ip。
浙公网安备 33010602011771号