• Python爬虫-代理池-爬取代理入库并测试代理可用性


    目的:建立自己的代理池。可以添加新的代理网站爬虫,可以测试代理对某一网址的适用性,可以提供获取代理的 API。

    整个流程:爬取代理 ----> 将代理存入数据库并设置分数 ----> 从数据库取出代理并检测 ----> 根据响应结果对代理分数进行处理 ----> 从 API 取出高分代理 ----> 用高分代理爬取目标网站 

    分析:

    1、爬虫类的编写:负责抓取代理并返回。

    • 因为不同的代理网站的网页结构不同,所以需要单独为每一个代理网页写爬虫。
    • 调用每个爬取方法,依次返回结果。  

    2、数据库类的编写:负责代理的存取与代理分数的设置。

    • 判断待存入代理是否存在,不存在便存入数据库。
    • 将代理存入数据库,首次入库的代理分数设置为100。
    • 代理测试失败时,代理分数做相应的扣除,分数低于指定值时从数据库中移除。代理测试成功时,将代理分数重新设置为100。
    • 需要使用代理时,从数据库中随机取出高分代理。

    3、保存类的编写:负责执行爬取,并将结果存入数据库。

    • 判断数据库是否已经达到满足值,根据返回值决定是否执行爬取。
    • 将爬取得到的结果存入数据库

    4、测试代理类的编写:负责测试代理对目标网站的可用性。

    • 用每一个代理爬取目标网站,根据响应状态码对代理分数进行设置。

    5、提取代理 API 的编写:负责提供获取代理信息的接口。

    具体实现:

    1、Crawler:

    2、RedisClient:

    3、Saver:

    4、Tester:

    5、API:

     

    总结:这里我只爬取了两个代理网站的代理,西刺和快代理,可以在 Crawler 类中添加名称以 crwal_ 开始的方法来扩充。详细代码我放到 Github上了,https://github.com/ysl125963/proxy-pool

  • 相关阅读:
    注册、登录、忘记密码实战
    python3错误:format() takes at most 2 arguments
    Charles手机抓包简要步骤
    VARCHAR2(N CHAR)与VARCHAR2(N)的区别
    关于VI一些常用的操作
    LINUX下 基于 Socket 的 UDP 和 TCP 编程具体实现
    VC++6.0实现文本格式的转换保存
    crt的sftp使用用于Windows与Linux之间的通讯
    pl/sql 导出脚本与使用
    在oracle10g下启动服务报 Permission denied错误解决方法
  • 原文地址:https://www.cnblogs.com/yangshaolun/p/10932846.html
Copyright © 2020-2023  润新知