美文网首页
Python构建自己的代理IP池

Python构建自己的代理IP池

作者: luacoding | 来源:发表于2019-10-11 22:45 被阅读0次

代码

GITHUB

目的

爬虫过程中,遭遇站点反爬虫策略,需要定期切换IP。所以我构建一个有效的IP池,用于之后的爬虫工作

做法

爬取西刺免费代理IP网快代理
筛选有效的代理IP入库

依赖

  • requests: HTTP请求

  • pyquery: Python 版的jquery ,解析HTML元素

  • PyMySQL:mysql ,本实例存储在mysql中。对于数据的操作,数据库还是更加方便。

实现

爬取网页,获取数据

def getProxy(protocal, link, page=1):
    try:
        url = f'https://www.xicidaili.com/{link}/{page}'
        res = requests.get(url, headers={'User-Agent': UA['PC']})
        if (res and res.status_code == 200):
            html = pq(res.text)('#ip_list tr')

            for i in range(html.length):
                host = pq(tds[1]).text()
                port = pq(tds[2]).text()
                

如上所示的代码(截取了部分),我们解析西刺免费代理IP网,获取目标IP 和 端口

检测IP,端口的有效性

西刺免费代理IP网提供的很多IP不具备有效性,所以需要做出过滤才可入库

def checkProxy(proxylink):
    try:
        ret = requests.get(
            'https://www.baidu.com',
            proxies={'https': proxylink},
            timeout=5,
        )
        if (ret and ret.status_code == 200):
            print(proxylink)
            return True
    except Exception as e:
         pass

我们使用上面的方法,代理请求百度地址,检测代理的有效性

将有效的IP入库,已在数据库中但是无效的IP,移除

# 连接数据库
def connect():
    try:
        db = pymysql.connect(
            MYSQL['host'],
            MYSQL['username'],
            MYSQL['password'],
            MYSQL['dbname'],
        )
        cursor = db.cursor()
        return {'db': db, 'cursor': cursor}
    except Exception as e:
        print('connect error:', e)

*****
mysql = connect()
# 检查DB 是否已存在某代理地址
mysql['cursor'].execute(
    f'select count(*) from proxy where host = "{host}" and port = "{port}"',
)
# 如果代理有效,且不存在DB中,代理入库
mysql['cursor'].execute(
    f'insert into proxy(host,port,protocal) values("{host}","{port}","{protocal}")'
)
mysql['db'].commit()
# 如果代理无效,但是又存在于DB中,删除代理
mysql['cursor'].execute(
    f'delete from proxy where host = "{host}" and port = "{port}"'
)
mysql['db'].commit()
# 关闭连接
mysql['db'].close()

因为需要对每个代理检测有效性,所有的检测IP有效性、IP入库都基于多线程实现。每个线程独享一个MYSQL连接。

上面阐述的比较碎片,具体的实现可以看源码,代码包含SQL结构。

展示效果

image.png

相关文章

  • Python构建自己的代理IP池

    代码 GITHUB 目的 爬虫过程中,遭遇站点反爬虫策略,需要定期切换IP。所以我构建一个有效的IP池,用于之后的...

  • 爬虫(2)--- 构建简单代理IP池

    目录 1. 何为代理IP池?2. 代理IP池构建2.1 浏览器伪装2.2 代理IP爬取2.3 代理IP验证2.4 ...

  • 构建自己的IP代理池

    爬取代理网站,检验代理ip效果并写入文档 主要进步:构造headers头,构造代理请求requests,多线程。 ...

  • Python代理IP池(IP proxy pool)构建

    本文转自:https://blog.csdn.net/qq_42415326/article/details/95...

  • 构建IP代理池爬取妹子图片

    同一个目录下创建三个文件 这个是download构建的ip代理池 最后这个是利用西刺代理的IP构造的IP池 还有我...

  • 构建属于自己的代理IP池

    对于学习爬虫来说,ip被禁几乎是常见的事。因此在爬取业务中,使用代理ip几乎是常态。但是对市面上的代理ip的服务,...

  • 2017-4-30爬取代理IP并验证

    之前有一次被豆瓣封IP了,就想着自己构建一些IP加UA.今天参考了这篇文章爬虫(2)--- 构建简单代理IP池先简...

  • scrapy突破反爬虫措施

    user-agent池 构建cookie池 ip代理来解决 禁用cookie,因为cookie会跟踪爬虫的访问过程...

  • 搭建自己的免费IP代理池

    参考链接:如何搭建自己的免费IP代理池 环境 python3.6 下载安装 https://github.com/...

  • Python构建代理池

    用 Python 爬取网站内容的时候,容易受到反爬虫机制的限制,而突破反爬虫机制的一个重要措施就是使用IP代理。我...

网友评论

      本文标题:Python构建自己的代理IP池

      本文链接:https://www.haomeiwen.com/subject/tjffmctx.html