python正则表达式不包含python爬⾍实训⼼得体会-python爬⾍学习⼼得
爬⾍新⼿⼀枚,因为⼯作原因需要学习相关的东西。发表下这段时间学习的⼼得,有说得不对的地⽅欢迎指指点点。
⼀.什么是爬⾍
在学习爬⾍之前只对爬⾍有个概念性的认识。通过向服务器发送请求获取服务器传回信息,再根据其提取所需的信息。原理虽然简单,但是涉及的细节⾮常多,从⼀个坑爬出来⼜掉进另⼀个坑。
⼆.post和get
post和get是两种向服务器发送请求的⽅式,有些http基础的同学应该都清楚他们的⽤处,在写爬⾍时,涉及到同服务器交互肯定是离不了这两种⽅法的。其中get请求⽤于⼀系列对服务器数据没有影响的操作,如获取html,检索等,⽽post⼀般是⽤于对服务器数据有影响的功能,如提交表单等。如果只是简单爬取信息,⼀般⽤get⽅法。除此之前,get⽅法的安全性较Post⽅式要差些,如果需要提交包含机密信息的话,建议⽤Post提交⽅式,但get的执⾏效率⽐post⽅法好。
三.编码⽅式
这是跌进的第⼀个坑。源于对⼀个⽹页爬取时,不管怎么样都失败,浪费了将近⼀天时间才发现是编码混乱的原因造成。⽬前⼤多数中⽂⽹站采⽤GBK,GB2312,UTF-8这三种编码⽅式进⾏编码,详细的编码原理可查阅其他资料。通常在获取⼀个⽹页的html代码后都会先根据其编码⽅式进⾏转码,下⾯⽤python对从path获取的⽹页根据utf-8的⽅式进⾏转码。
quest.urlopen(path).read().decode("utf-8")
正常来说,⼀个⽹页只会有⼀种编码⽅式,通过上述的代码就能完成对其的转码。但是,如果在⼀个⽹页⾥存在两种编码⽅式的字符会怎么样?对,就是这个原因导致我在这个问题上卡了将近⼀天。对我这个刚接触爬⾍的⼈,怎么也不会想到⼀个⽹页⾥会存在两种编码⽅式,所以我⽆论⽤哪种⽅式进⾏转码都会失败。当到原因后,使⽤了lxml库⾃带的转码⽅法后可以顺利完成转码。
quest.urlopen(path).read()
htmletre = etree.HTML(html)
result = string(htmletre, encoding="utf-8", pretty_print=True, method="html")
但是后来发现,这种⽅法依然有很⼤的问题。就是如果⼀个⽹页包含有两个编码的字符时,如果对其中⼀种编码⽅式进⾏转码,当第⼀次遇到另⼀个编码的字符时,转码就会结束,最后导致结果缺失,
对于爬取信息来说是不可接受的,特别是当另⼀个编码的字符出现在前半部分时会导致后半部分信息全部缺失。放弃这种⽅法后,通过重新分析⽹页的代码,发现另⼀种编码⽅式只会出现在极个别地⽅,如果放弃这部分编码,只对⼤部分有效信息进⾏转码也是可以接受的。查阅相关⽂档后,利⽤以下代码就可以实现对⼤部分编码进⾏转码。
quest.urlopen(path).read().decode("gbk",errors="ignore")
四.正则表达式
在获取html代码后,就可以利⽤正则表达式进⾏信息提取了,正则表达式相关的知识也请查阅其他⽂档。这⾥想要说⼀下lxml库的使⽤,虽然⼤部分信息都可以通过正则表达式进⾏提取,但如果需要对代码本⾝的结构进⾏提取和分析就需要⽤到lxml库了。虽然正则表达式也能进⾏相关的操作,在不知道lxml库之前也利⽤正则表达式对标签层次关系进⾏过分析,但还是推荐使⽤lxml库,这⾥推荐⼀个链接。 Python 爬⾍利器三之Xpath语法与lxml库的⽤法 | 静觅 。
五.Chrom浏览器
Chrome浏览器对于写爬⾍⾮常有⽤,Chrome⾃带的开发者⼯具能帮助分析⽹页的源码、资源和数据包。特别是要写表单提交⼀类功能时,Chrome⾃带的抓包功能⾮常好⽤,通过分析包结构可以实现各
类复杂表单的模拟提交。如果对Chrome开发者⼯具不熟悉的同学,推荐下⾯这个链接。Google Chrome 浏览器 开发者⼯具 使⽤教程
六.爬⾍与机器学习
在学习爬⾍前,⼀直在学习机器学习。通过这段时间对爬⾍的学习,我觉得机器学习跟爬⾍能够很好的结合起来。⼀⽅⾯对某些模型的训练可以通过爬⾍来获取⾜够多的数据样本,另⼀⽅⾯,因为各种⽹站的结构有很⼤的差异,利⽤机器学习可以对各种结构的⽹页进⾏准确分析和信息提取,最终达到相辅相成的⽬的。
⽆论是爬⾍还是机器学习我都是⼀个初学者,上述都是这段时间的⼀个⼼得和总结,⼀⽅⾯希望对其他初学者有⼀点帮助,另⼀⽅⾯也希望有任何说错的和还能改进的地⽅⼤家能够指出来。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。