用一周的时间翻完了python网络数据采集,在此整理一下。
0x000数据采集
数据采集是一个很宽泛的概念,总的来说应该包含以下部分。
选择采集目标源–>组织构建数据库–>编写爬虫–>数据清洗–>数据整理–>存入数据库,一般情况下选择目标源和构建数据库是其中的主要元素。目标源决定你收集到数据的可用性,爬虫决定你的计划是否可达。
0x001目标源选择
个人感觉目标源选取应按照以下条目进行排序:数据相关性 、易爬取程度、数据量、robots协议,当然根据自己需求可以灵活变动。同等情况下尽量避免大型企业的官网,因为其中大部分都具备反爬策略(当然有时间可以选择以下,这个斗智斗勇的过程挺锻炼的
0x010爬虫
推荐使用的库有Requests、BeautifulSoup、scrapy、selenium
如果对于效率需求不是特别高,可以考虑使用Requests post请求搜集页面,然后使用BeautifulSoup分析页面标签,这样实现较为简单,也能解决大部分需求。
如果对效率比较重视,或需要完成一个工程化的采集项目,Scarpy可以作为首选。对分布式处理的良好支持和清晰的模块化层次在提升效率的同时更易于进行代码的管理。
对http的相关请求,使用requests比用其他库函数更加明智。
如果你处理的页面大量使用了js或者存在验证码 处理过程就比较麻烦了 不过selenium仍然可以解决你大部分需求。
0x011数据清洗
因为种种原因,我们获得的数据和期望中的总有一定的差别,这一部分的任务就是消除异常数据将其转换为易于处理的形式。
数据的异常主要包括:数据格式异常和数据内容异常。
你需要的数据可能存储于一个PDF、word、jpg格式的文件中,将它们转换成文本然后提取相应的信息是数据清洗工作的一部分。对这部分我们可以使用Python的Pillow、Tesseract、NumPy来进行相关的处理,当然利用第三方接口也是个不错的主意。
另外,因为网页发布者的疏忽,网页上有部分数据和其他页面呈现不同,但你可能把这部分数据也爬取下来。这时你需要进行一定的处理将数据格式进行统一。
0x100反爬虫
这部分是爬虫中最有意思的部分,你需要与对方斗智斗勇,很可能你还没有想好怎么绕过他的机制,对方又对反爬机制进行了更新。97年eBay和Bidder’s Edge之间的爬虫与反爬虫策略为后来的数据采集者和运维工程师提供了不少示例,但现今html的迅速发展,似乎对双方也有不小的提示。
目前常见的反爬虫机制主要有如下几种:
1.验证码
从最基础的字符识别验证码,到后来文字验证码,表达式验证码,滑动验证码。虽然层次多样,但处理机制大概相同,最基础的应用一些计算机图形学的知识就可以解决,深层次的利用机器学习训练相关识别软件也能破解。12306的图片相关性验证码主要基于数据的深度拓扑,但是其对于人类本身也是一个不小的挑战,特别是在抢票的时候突然让你选出下图中所有的Lan口,除非你对计算机硬件有所了解,不然选出正确答案确实不易。但是其也有一定的破解方案,仍然利用图像识别结合用户反馈,似乎铁友有一段时间推出过一个大众活动,使用手机帮助进行图像标识,用白菜价获得了数百万标记好的数据,在后来的购票中只能选择相应的验证码。
2.表单隐藏内容
有些页面表单会向用户隐藏一些信息,如果你使用爬虫不加以区分而填写了相应的字段,很可能会被对方直接判为一个爬虫,然后进行ip封禁。
3.页面数据显示处理
有些页面会将数据进行重排组成正确的数据。如果你在爬取过程中没有注意也只能得到一些毫无价值的内容。
Emmm…
本来想弄一个验证码识别的小程序 但发现使用Python的Tesseract还需要自己标注一些数据 但本意是弄一个自动训练的识别工具 所以暂时搁置 等以后有了相关想法再开始动工
菜鸡还是要继续努力啊…
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试