不学网

 找回密码
 立即注册

只需一步,快速开始

手机号码,快捷登录

查看: 73|回复: 0

[python] python3 urllib模块爬西刺代理IP页面并验证是否可用

[复制链接]
jasonlv 发表于 2018-4-4 18:05:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 jasonlv 于 2018-4-4 18:08 编辑

分两步实现爬取和验证ip是否可用。

    经验证可用性很低,哈哈,不花钱 还是不行啊。
TIM截图20180404180831.jpg
    1、第一个py文件代码实现爬取代理ip和port
  1. import re
  2. import os
  3. import time
  4. from urllib import request,parse
  5. # 响应头
  6. headers = {
  7.     'Accept': '*/*',
  8.     'Accept-Language': 'zh-CN,zh;q=0.8',
  9.     'User-Agent': 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
  10.     'Hosts': 'hm.baidu.com',
  11.     'Referer': 'http://www.xicidaili.com/nn',
  12.     'Connection': 'keep-alive'
  13. }
  14. for i in range(1,1000):
  15.     url="http://www.xicidaili.com/nn/{}".format(i)
  16.     print(url)
  17.     req = request.Request(url=url,headers=headers)
  18.     try:
  19.         req = request.urlopen(req,timeout=3,).read()
  20.     except Exception:
  21.         print("异常!")
  22.         continue
  23.     req = req.decode("utf-8")
  24.     # 提取ip和端口
  25.     ip_list = re.findall("(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?(\d{2,6})", req, re.S)
  26.     # 将提取的ip和端口写入文件
  27.     f = open("ip.txt","a+")
  28.     for li in ip_list:
  29.         ip = li[0] + ':' + li[1] + '\n'
  30.         f.write(ip.strip()+"\n")
  31.     time.sleep(2)       # 每爬取一页暂停两秒
复制代码


    2、第二个py文件验证上面ip.txt文件中的ip是否可用
  1. from urllib import request
  2. import socket
  3. socket.setdefaulttimeout(3)
  4. inf = open("ip.txt")    # 这里打开刚才存ip的文件
  5. lines = inf.readlines()
  6. proxys = []
  7. for i in range(0,len(lines)):
  8.     proxy_host = "http://" + lines
  9.     proxy_temp = {"http":proxy_host}
  10.     proxys.append(proxy_temp)
  11. # 用这个网页去验证,遇到不可用ip会抛异常
  12. url = "http://ip.chinaz.com/getip.aspx"
  13. # 将可用ip写入valid_ip.txt
  14. valid_temp = []
  15. count = 0
  16. for proxy in proxys:
  17.     count += 1
  18.     if count == 10:
  19.         break
  20.     try:
  21.         # 代理配置
  22.         proxy_obj = request.ProxyHandler(proxy)
  23.         opener = request.build_opener(proxy_obj)
  24.         request.install_opener(opener)
  25.         #验证代理,5秒超时
  26.         res = request.urlopen(url).read()
  27.         valid_ip = proxy['http'][7:]
  28.         print('有效ip:{} '.format(valid_ip))
  29.         valid_temp.append(valid_ip)
  30.     except Exception:
  31.         #不可用打印
  32.         print("不可用:{}".format(proxy))
  33.         continue
  34. with open("可用ip.txt", "w" ) as f1:
  35.     for i in valid_temp:
  36.         f1.write(i)
复制代码

个人博客:http://www.jasonlv.cc

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|不学网

GMT+8, 2018-4-20 20:52

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表