python构建自己的Ip代理

写在前面:

    刚开始写博客,发现访问量有点不尽人意,想用着爬虫来提高一下啊csdn的访问量,无奈,一段时间内相同的ip不会累加访问量,所以只能通过代理ip来实现这个功能,先不说目的有没有达到,只是ip的获取还是遇到了些坑,写下这些内容,为后来者提供借鉴也为自己提供总结的机会。

项目主要实现内容:
运用多线程,获取网上的免费IP,以及对其进行验证。

项目主要涉及的库:
1.requests(这里也可以用urllib,不过我还是喜欢用requests库…)

    2.BeautifulSoup(查找网页内容很好用)

    3.threading(多线程)

项目代码编写:
思路:
ip代理思路还是很简单的,运用爬虫获取一些提供ip的网站提供的免费ip,在通过ip验证网站进行验证,并整理返回。

------------------------------------------不乱所以不华丽的分割线------------------------------------------

     代码编写:

这里用的网站是:http://www.xicidaili.com/nn/1 # 1为第一页,2为第二页…

headers加一个:

“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36”
就可以请求成功,然后运用:

soup = BeautifulSoup(re.text, “html5lib”)
list_tr = soup.find_all(“tr”)

编码后获取其中的ip信息,并通过 请求 http://ip.chinaz.com/getip.aspx 可以的到ip可不可用 这里可以直接打开进行验证一下。

我们将获得的ip打包成:

ip = {“http”: “http://” + tr.contents[3].text + “:” + tr.contents[5].text} #contents获取tr内的子元素

re = requests.get(url, proxies=ip, timeout=3)
运用proxies来使用代理,这里可以不用headers就可以请求了。如果超过timeout 设置的3秒就会抛出异常,所以需要一个异常处理。


基本的ip代理我们已经完成了,但是我们这里会碰到的一个问题就是速度太慢了,我们验证一个ip需要3秒钟,100个就是5分钟,200个…显然我们希望能尽快的完成这项任务。

于是我们需要加入多线程:

thread = threading.Thread(target=函数名, args=(参数))
thread.start()
我们用for开出5个线程,每个线程请求网站中一页的ip地址,那我们的效率可以提高五倍,当然你也可以开的多一点,这个与你计算机的性能有关。

    但是又有一些不尽人意的事情发生了,我们发现程序不会等待多线程执行完以后再继续执行以后的代码,也就是说我还没有获得能用的ip就已经开始模拟访问csdn了,这显然不可以。

    所以我们希望让程序可以等待获取ip的多线程运行完之后再运行以后的代码,这里我们加入了join()。它可以开启线程守护(挺霸气的...守护,不禁让我想到了单身狗),让主线程等待开启守护的线程,当然也可以加入time参数表示多少秒,这里没必要可以自行百度。

    所以我们的代码变成了这个样子:

for i in :#当然是伪代码
thread = threading.Thread(target=函数名, args=(参数))
threads.append(thread)

线程守护等待子线程运行完再运行下面代码:

for i in range(0, len(threads)):
# t.setDaemon(True)#主线程一旦执行结束,则全部线程全部被终止执行,
th[i + t].start()
for t in range(0,len(threads)):
th[i + t].join()
到这里我们的获取免费的ip代理已经完成了。

再多说几句:
当然我们还需要其他网站的免费ip,因为这个网站我TMD怕了10页将近两三百个ip只有那么四五个能用…


来自:http://722first.club

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值