Python采集数据从入门到入狱

1. 警示用语:师傅领进门,判刑看个人

温馨提示一下:拿国外的网站练手,别碰国内的网站,请不要给自己找不必要的麻烦

1.1 GitHub学习源代码

源代码GitHub地址 全文没有讲解任何例子,需要个人全文阅读分析

      GitHub项目源码基本可以正常运行,不过你需要认真阅读包下的Markdown文档,程序先跑起来再去认真学每一个细节问题。源码的例子很多,我就不一一例举了。你需要沉下心认真去分析网页数据,注意素质,遵守君子协议[url_root/robots.txt],不要从事违法的活动,更不要采集用户的数据,不要贪图一点小利毁了自己的职业生涯

1.2 Python的多线程

CPU非密集性操作:一般Python的多线程在多核情况下远不如多进程,一般文件读写没什么问题,注意线程池大小

    import concurrent.futures
    # data_list: [{'key':'1'},{'key':'2']   or  [1,2.3.4.5.6]     max_workers=12
     with concurrent.futures.ThreadPoolExecutor(max_workers=12) as executor:
        executor.map(your_function, data_list)
        executor.shutdown()

1.3 Python的多进程

CPU复合密集操作:主要是对于复合操作且不存在线程通信的时候,采用此方式,大部分场景多进程>多线程,注意进程池大小

import multiprocessing as mp
  # data_lis:[(1,2,3),(3,4,5)]   mp.cpu_count()
    with mp.Pool(mp.cpu_count()) as p:
        p.starmap(your_function, data_list)

2. 网络爬虫方式

  1. 在点击一个网页的时候,网页数据会被渲染在屏幕界面,我们可以利用复制数据粘贴到本地,或者使用打印的方式
  2. 可以利用程序使用HTTP协议进行访问对方的服务器,再获取返回体的text(文本信息)或者content(二进制文件流)

3. 网络数据存在的形式

  1. 文本数据,张三李四XXX,HTML展示的所有文字数据
  2. 链接按钮:点击跳转,点击弹框,提示框等
  3. 文件数据:图片,音频,视频:二进制文件流

4. Selenium 网络爬虫

      当我们无法使用上述【2.网络爬虫方式】时候,可以利用机器模拟进行人工操作,Selenium -Deriver创建一个临时浏览器资源替代我们去操作网页,既然选择了Selenium ,就用常规操作点击页面进行采集数据,后续个人能力提升再结合HTTP进行数据采集。
       综上所述: 本质Selenium 就是人为创造一个自动化浏览器工具

5. Selenium 模拟登录

      若一个网址,不能登录就无法看到任何重要数据的时候,我们只能通过登录的方式去采集数据,一般账号密码都会有加密,所以HTTP方式基本都不可取,只能采取模拟登录方式去获取登录验证

  1. Cookie: 传统登录密钥,cookie一般大部分情况可以满足适用场景,注意避免频繁过分调用
  2. Token:效果和Cookie一样,只是存储方式有所不同
  3. Api-Secret:加密更严格,效果与1.2一样

      如果采集的网址对你来说很重要,再去Selenium 模拟登录或者登录一次,否则不要尝试去登录,换下一个不要登录的网址,登录并不是上来就会的,登录风险就是及其有风险的,封禁IP和封禁账号不是做不到,若是你经常出现禁止域名单中,就会伴随着一些风险,完全看网站开发者的心情

5.1 登陆验证方式

  1. 图片验证码:1+1=? S/D-8-9 点击顺序文字或拖拉拽图片
  2. 交互验证码:手机短信码,邮箱验证码,短信验证码
  3. 人眼识别:人机交互,验证是否不是机器人,大多数情况需要个人自行点击输入

5.2 图片验证等级

      利用浏览器的F12把图片URL地址取出,在浏览器打开图片地址,F12看图片的返回体Renponse,这个图片是怎么经过加密传过来的,有些图片是明文且点击并不会重置 ,有些图片则点击就重置,很明显HTTP无法获取,所以从登录可以看出这个网站的安全性,若是什么数据都在服务器保存且加密的时候就不要就纠结图片的绕过了,分析别人网站有问题最好也可以反馈给网站开发者,不要长期利用漏洞

5.3 图片验证码解决方案

      这里我只提供一个图片验证码解决方案,利用浏览器截屏截取指定图片验证码位置保存,进行训练识别图片或用别人的图片模型库【一般都是用别人的库好一些,简单的可自行识别】。不管是什么登录验证,都可以人工输入,但是稳定的定时自动化就需要考虑提高登录尝试成功率,稳定长久的网页基本都是绕不过登录的,所以这也是为什么采用Selenium的原因

6. Selenium Google-Deriver 优化

  1. 科学上网的时候网速慢,我们需要禁止浏览器去加载图片,可以提升爬取速度
  2. 网页的JavaScript复杂且难以获取,我们需要禁止浏览器去加载JavaSctipt
  3. 若是我需要点击在线浏览文件的时候,无法下载,我们需要指定浏览器后台下载
  4. 若是遇到轮滑加载数据,可以尝试嵌入JavaScript代码,可以使采集效果更佳
  5. 当我们点击网页的时候,要尽可能模拟人类操作,线程休眠1S的效果可以使爬取效果更佳
  6. 避免使用浏览器回退操作,使用get(url)的方式效果最佳,因为页面基本都是一样的
  7. 有把握的时候,可以采用多线程或多进程优化自己的程序,但是注意测试调用频率

# 浏览器轮滑底部
window.scrollTo(0, document.body.scrollHeight)
driver.execute_script(window.scrollTo(0, document.body.scrollHeight))

# 禁止图片加载
    prefs = {
        'profile.default_content_setting_values': {
            'images': 2,
            # 'javascript': 2   # 禁止 JavScript 加载
        }
    }
    chrome_options.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(options=chrome_options)

# 后台文件下载
    down_load_dir = os.path.abspath("../../out/firefox")
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ['enable-automation'])
    prefs = {
        "download.default_directory": down_load_dir,
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "plugins.always_open_pdf_externally": True
    }
    options.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(options=options)

6.1 浏览器F12定位元素操作

这个箭头操作会简化我们对数据的定位和分析,可以很清晰看到文本数据或者链接的指定位置
在这里插入图片描述

7. 服务器反爬虫破解

      花时间在这个上面是很危险的,若是你花了很久时间都无法通过基本HTTP的方式采集数据,请不要再尝试,请使用 Selenium。若想深入了解,可以了解下密码加密方式,SSL,CA证书,浏览器,HTTP协议,抓包,IP代理,Java后端程序员,Jmeter。

      若网站遇到RSA源码加密+Http-SSL这种,不要尝试再浪费时间,请使用 Selenium

8. 如何快速开始一个 Selenium 爬虫

    # google 临时浏览器
    driver = webdriver.Chrome()
    driver.get(‘’url地址)
    driver.maximize_window()   # 全屏

8.1 首先需要验证网址的安全性和可行性

8.1.1 Requsets.get 校验后端接口是否可以非鉴权访问
import requests

requests: 【GET】【POST】 注意个别情景需要带入登录密钥,一般情况在Request-Headers中,能不带入登录密钥最好不要带入
8.1.2 Selenium 禁止JavaScript后查看服务器页面响应

      有一些网站如果你禁止了JavaScript加载,则会导致网页浏览器直接奔溃,一般反爬的措施有很多,只要无法正常采集页面出现的数据,那些都算是反爬虫,所以只能按照合理流程操作,不要觉得很慢,因为Selenium 采集数据大部分情况都是一次成功就过了 【 定时自动化采集数据时间长了会很危险】

8.2 安全性不高且有需要的数据时

8.2.1 解耦操作:面向对象进行分析数据
  • 数据库表设计思想,三大范式
  • 数据流程分析,数据的入口与出口
  • 若是非必要的数据,直接采集即可,无须过度分析
8.2.1 采集数据:预清洗一个区域的数据集,防止后续扩展用到

      一般情况:利用for循环机制,本质浏览器的渲染都是规律循环,若是数据库分析合理,则可以直接从顶层数据定位,好好利用for循环机制可以让自己的程序更加强大

8.2.2 保存数据:Mysql,ElasticSearch,Json,Files,内存队列
  • Mysql:免费开源的数据库,需要对SQL有一定的认知
  • ElasticSearch:主要用于文本的全文检索,高频词汇,高亮词汇等
  • Json:若不想使用任何中间件,可以采用Json文本本地保存,后续在进行扩展到其它地方
  • Files:本地文件路径,不要把文件放入到某些云中台上,最好都是本地存储
  • 内存队列:若是你爬取的时候,需要临时延迟某些操作,可以采用这种方案
8.2.3 处理数据:后置处理数据集 【清洗,转换,汇聚】

     此操作一般是对数据的清理,可以为复合采集操作的下一次采集做预准备,数据明了的情况下,也可以直接得出采集结果,一般简单采集数据都到这一步停止了

8.2.4 下载数据:根据需求场景调整线程方式
  • 多线程:是否用多线程,还是需要经验累积,一般情况建议不用,使用线程池时注意别调太高的上限
  • 多进程:是否采用多进程,例如1000多个ts文件,一个ts文件5MB,这种还涉及对数据文件的复合操作,注意进程池大小
  • 区别:Python的多线程和多进程最大的区别就是内存共享和通信机制,一般明显感觉内存不断地升高需采用多进程
8.2.5 科学分析:科学合理地分析数据集

     需要沉下心认真分析数据集,看看数据集一般属于哪一种领域范畴,在对应的情境下,把自己认为用户或者顶层开发者去分析,得出的结果一般不会差异很大,虽然达不到商业级别的规模数据,但是在一般情况下,采集多次的结果还是很正确的

8.2.6 绘制图片:根据数据集绘制图片

     这个网络上的文档有很多,一般推荐使用pandas,从简单的图形绘制做起

8.2.6 复习流程:整体是否解耦合理
  • 数据流向:数据的流程走向是否拆分合理
  • 常量数值:分析代码中的常量Key是否长期变化,拆分常量值
  • 开闭原则:在不修改源代码的情况下,能否写一个程序就替换某些envireonment环境值完成所有相似的操作
8.2.7 文档操作:流程与注释文档化

      Python相对来说,其实注释并不友好,所以程序解耦合理即可,但是必要的注释需要注明,需要对个人研究的成果进行文档化,形成代码肌肉记忆

9. Python大数据

      经过长时间地采集数据锻炼后,你就会属于拥有自己的数据库,数据集渐渐地就会膨胀,不管是[1…n]这种增长,还是一个文件1G,100个这样的文件规模,其实都算是大数据。所以形成对数据的累积最重要的是考验自己对数据的分析的能力,一般情况下采集有效的数据会很少,所以需要提高面向对象的能力,解耦程序会锻炼出来的

9.1 Pandas+Matplotlib+Seaborn

      一般自己能拥有的数据集都不算是核心商业数据,所以分析只是锻炼自己,但是若你爬取的数据很优秀也可以分析并提取到样本种群的特征,分析样本是可以预测未来的发展方向

10. 人工智能

      当你采集的数据集越来越大,一段时间后形成一定的规模后,可以把这些数据聚合成一种模型,黑与白或者线性可行性区间模型,我们可以用来进行智能预测或推理操作。源代码并没有涉及到人工智能,但是当你一步步形成自己的数据集后,你会明白需要往人工智能去发展

10.1 计算机移动视觉

      移动视觉模拟人类眼睛去识别某个事物,经过计算机的处理运算,可以得出被识别的事物的属性,然后形成对照,最终反馈结果给客户端

10.2 计算机推理语言

      这个是本篇文章没任何关系,只是我个人喜欢的方向,可以利用某个数据集的特征去总结习惯规律,例如:去提取某个论坛种群样本对某个事物的喜爱,形成某种可行性推理,源代码有涉及提取数据分析,也可以按照自己的想法思维去分析,数据可以有很多不同的方向进行分析

10.3 计算机目标检测

      计算机模拟人脑去定位事物【一般是图片集】目标,提取特征,分组特征,聚合结果,形成记忆,反复训练,得出结果

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值