爬虫实战【13】获取自己的动态代理ip池

在爬取一些比较友好的网站时,仍然有可能因为单位时间内访问次数过多,使服务器认定为机器访问,导致访问失败或者被封。如果我们使用不同的ip来访问网站的话,就可以绕过服务器的重复验证,使服务器以为使不同的人在访问,就不会被封了。

如何获取动态ip

网络上有很多提供代理ip的网站,我们经常使用的一个是西刺免费代理ip,url=‘http://www.xicidaili.com/

我们来看一下这个网站的构成:

【插入图片,西刺代理页面】

我们获取这个页面上的所有ip即可。

一个合理的代理ip的格式是这样的:

{‘http‘:‘http://106.46.136.112:808‘}

也就是说每个代理是一个字典,这个字典中可以有很多个ip,每个代理ip都是以http为key。当然考虑到字典的特性,如果我们只获取http为key的代理,那么这个字典中只能有一个元素。

我们就简单点,只考虑http的情况。

通过PyQuery来解析西刺的源代码,所有的ip都在一个tr里面,但是有些tr是标题,我们过滤一下就可以了。

由于页面比较简单,这里就不做介绍了。

如何使用代理ip

我们以requests库为例:

import requests

#这个字典可以只有一个键值对,如果只考虑http的情况
proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080"
}

requests.get("http://example.org", proxies=proxies)

全部代码

西刺也是有访问限制的,短时间内多次访问会被封锁,所以最好的办法是每个一个小时访问一下,将所有的代理ip保存到本地。

每次需要ip的时候从本地获取。

在下面的例子中,我们先获取到一个ip池,当然是文本格式的,然后短时间内访问了200次豆瓣主页,都成功了。

import requests
from pyquery import PyQuery
import random

def get_ip_page():
    url = ‘http://www.xicidaili.com/‘
    headers = {
        ‘user-agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0‘
    }  # 不加请求头信息还不能获取到源代码信息
    response = requests.get(url, headers=headers)
    try:
        if response.status_code == 200:
            # print(response.text)
            return response.text
    except Exception:
        print(‘获取ip出错!‘)

def parse_save_ip():
    html = get_ip_page()
    doc = PyQuery(html)
    even_ips = doc(‘tr‘).items()
    result = []
    try:
        for item in even_ips:
            ip = item.find(‘td‘).eq(1).text()
            port=item.find(‘td‘).eq(2).text()
            # http=item.find(‘td‘).eq(5).text()
            # proxy_ip={http:ip}
            # result.append(proxy_ip)
            if ip != ‘‘:
                # print(ip)
                result.append(‘http://‘+ip+‘:‘+port)
    except Exception:
        pass
    with open(‘proxy.csv‘,‘w‘) as f:
        for item in result:
            f.write(item)

def get_random_ip():
    #短时间内连续访问多次会被封住,将获取的代理ip存到本地,每个小时获取1次即可。
    with open(‘proxy.csv‘,‘r‘) as f:
        ips=f.readlines()
    random_ip = random.choice(ips)
    proxy_ip = {‘http‘: random_ip}
    return proxy_ip

def how_to_use_proxy(proxy):
    url=‘https://www.douban.com/‘
    webdata=requests.get(url=url,proxies=proxy)
    print(webdata)

def main():
    proxy = get_random_ip()
    print(proxy)
    how_to_use_proxy(proxy)

if __name__ == ‘__main__‘:
    parse_save_ip()
    for i in range(200):
        main()
        print(‘第%d次访问成功!‘%(i+1,))
时间: 2024-10-06 01:09:39

爬虫实战【13】获取自己的动态代理ip池的相关文章

Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

原文链接: Jack-Cui,http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望指正. 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于

【python3】如何建立爬虫代理ip池

一.为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在某段时间内,当某个ip的访问量达到一定的阀值时,该ip会被拉黑.在一段时间内被禁止访问. 这种时候,可以通过降低爬虫的频率,或者更改ip来应对.后者就需要有一个可用的代理ip池,以供爬虫工作时切换. 二.如何建立一个爬虫代理ip池 思路:   1.找到一个免费的ip代理网站(如:西刺代理) 2.爬取ip(常规爬取requests+BeautifulSoup) 3.验证ip有效性(携带爬取到的ip,去

构建一个给爬虫使用的代理IP池

做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径得到: 从免费的网站上获取,质量很低,能用的IP极少 购买收费的代理服务,质量高很多 自己搭建代理服务器,稳定,但需要大量的服务器资源. 本文的代理IP池是通过爬虫事先从多个免费网站上获取代理IP之后,再做检查判断IP是否可用,可用的话就存放到MongoDB中,最后展示到前端的页面上. 获取可用Pr

如何搭建稳定的代理ip池, 供爬虫使用

新型的代理ip池aox_proxy_pool 在这篇文章之前, 应该不少人都看过很多搭建代理ip池的文章, 然后发现都是坑, 无法使用.说的比较多的 推荐买xx家的代理ip, 贼稳定, 好使(广告) 抓取xx免费代理ip, 然后自己写一个校验, 然后写一个api, 提供给爬虫使用 第一种方法就不说了, 真的存在几家不错的代理ip(别问我谁家的好, 我不知道, 我写这篇文章就为了推销我自己写的项目好伐) 第二种, github上这种项目海了去了, 绝大部分, 在你搭建好以后, 发现爬虫还是爬不动,

如何利用动态代理IP来做SEO(网络营销)

对动态代理IP大家都不陌生,今天我们来聊下如何利用动态代理ip来做SEO优化.其实除了SEO很多网络营销也都需要用到代理IP,因为很多网络营销的用户都知道,投票.注册帐号.发帖子等工作,都需要用到代理IP这个工具,才能毫无限制的操作. 动态代理IP对seo网站运营的影响: 我们在尝试运用动态代理IP之前,先说说咱们有什么常规化的seo优化方式去优化网站,其中要做好2点.第一点做好基本优化.第二点,深入认识搜索引擎: 1:做好基本优化:说的就是站内优化和站外优化.站内优化就是把网站优化的基础完善,

实战1:建立代理IP池

一.爬取免费代理IP 1.爬取代理IP: #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Meng Zhaoce import requests from bs4 import BeautifulSoup from multiprocessing.dummy import Pool as ThreadPool #多线程模块 from pymongo import MongoClient data = [] def getIp(page)

Redis学习之代理 ip 池设计方法详解

代理 ip 因为配置简单而且廉价,经常用来作为反反爬虫的手段,但是稳定性一直是其诟病.筛选出优质的代理 ip 并不简单,即使付费购买的代理 ip 源,卖家也不敢保证 100% 可用:另外代理 ip 的生命周期也无法预知,可能上一秒能用,下一秒就扑街了.基于这些原因,会给使用代理 ip 的爬虫程序带来很多不稳定的因素.要排除代理 ip 的影响,通常的做法是建一个代理 ip 池,每次请求前来池子取一个 ip,用完之后归还,保证池子里的 ip 都是可用的.本文接下来就探讨一下,如何使用 Redis 数

基于 Redis 的代理 ip 池设计

代理 ip 因为配置简单而且廉价,经常用来作为反反爬虫的手段,但是稳定性一直是其诟病.筛选出优质的代理 ip 并不简单,即使付费购买的代理 ip 源,卖家也不敢保证 100% 可用:另外代理 ip 的生命周期也无法预知,可能上一秒能用,下一秒就扑街了.基于这些原因,会给使用代理 ip 的爬虫程序带来很多不稳定的因素.要排除代理 ip 的影响,通常的做法是建一个代理 ip 池,每次请求前来池子取一个 ip,用完之后归还,保证池子里的 ip 都是可用的.本文接下来就探讨一下,如何使用 Redis 构

.Net——做一个简单代理IP池

一.缘由. 抓取数据时,有一些网站 设置了一些反爬虫设置,进而将自己本地 IP 地址拉入系统黑名单.从而达到禁止本地 IP 访问数据的请求. 二.思路. 根据其他 代理 IP 网站,进行一个免费的代理 IP 进行搜集,然后进行统一 验证 管理 如下图: 三.抓取包含代理 IP 的网站页面. 抓取来网站代码之后,利用 HtmlAgilityPack 进行 html 的解析.并将代理 IP 验证,存放队列等操作. 四.直接看效果图. 运行效果. 浏览器 请求 :http://127.0.0.1:12