python 3 爬虫获取可用ip地址(小白)
来源:互联网 发布:传智播客淘淘商城源码 编辑:程序博客网 时间:2024/05/17 03:25
前几天刚刚把正则表达式看了一些,也是只是稍微懂了一点点,所以想要写一个简单的程序试一下。然后就想到了以前在找免费的代理的时候有好多不能用的,所以就尝试着写了一个这样的爬虫程序,写的不是很好,写的很复杂,等以后再去写简洁一些吧。
先直接把代码弄上,然后再说一下里面的重点内容。
import reimport urllib.requestimport socketdef get_line(html): '''将对于ip有用的内容返回,返回值是列表!''' line_re = re.compile(r'(?:td>)(.+)(?:</td>)') list = line_re.findall(html) return listdef get_ip(html): '''得到所有的ip内容,以列表的形式返回!''' list = get_line(html) ip_re = re.compile(r'(?:25[0-5]\.|2[0-4]?\d\.|[01]?\d\d?\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b') ans_list = [] list_len = len(list) str = "" for item in list: if ip_re.match(item) != None: ans_list.append(str) str = '' str += item continue if re.search('[\u4e00-\u9fa5]+',item) == None: str += '\t' + item return ans_listdef Judge_ip(ip_list): '''检查ip是否可以用......''' url = 'http://ip.chinaz.com/getip.aspx' f = open('E:\\python_py\output.txt', 'w') #socket.setdefaulttimeout(3)#设置爬取网页的时间限制,还有一种在面的open函数把timeout参数设置为3的方法 for i in range(0,len(ip_list)): ip = ip_list[i].split('\t') if len(ip) == 3: try: proxy = {ip[2]: ip[0] + ':' + ip[1]} proxy_support = urllib.request.ProxyHandler(proxy) opener = urllib.request.build_opener(proxy_support) html = opener.open(url,timeout=3).read() f.write(ip_list[i] + '\n') except Exception as e: print ('代理 '+ ip[0]+' 不可用' ) continue f.close()if __name__ == '__main__': url = 'http://www.xicidaili.com/' rep = urllib.request.Request(url) rep.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36') reponse = urllib.request.urlopen(rep) html = reponse.read().decode('utf-8') ip_list = get_ip(html) Judge_ip(ip_list)
用到的正则表达式内容:
ip_re = re.compile(r'(?:25[0-5]\.|2[0-4]?\d\.|[01]?\d\d?\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b')line_re = re.compile(r'(?:td>)(.+)(?:</td>)')re.search('[\u4e00-\u9fa5]+',item)ip_re 表示的是匹配一个代理IP地址
我们发现在IP地址的有用的信息两边都存在着<td>和<\td>所以就先把这个之间的内容提取出来,对应着正则表达式:line_re 的内容
第三个是匹配其中是否含有汉字信息,我们这里匹配的内容是IP地址,IP端号,以及IP类型,我们发现除了这三个内容之外,别的都是存在汉字的,所以我们需要把有用的信息提取出来,这个就是这个正则表达式的作用
在后面测试表达式是否可用的里面:
我们判断如果连接尝试的阻塞等待时间大于 3 秒的话,我们就认为这个IP地址有问题,所以就被异常所捕获,继续判断后面的IP地址是否可用.......
判断IP可用的使用的网站是:
http://ip.chinaz.com/getip.aspx然后将可以使用的IP地址写入文件即可
阅读全文
1 0
- python 3 爬虫获取可用ip地址(小白)
- python获取ip地址
- Python获取ip地址
- Python获取IP地址
- python 爬虫获取代理Ip
- python爬虫实战-自动IP地址查询
- python获取网卡IP地址
- Python爬虫(一)之获取代理IP
- Python爬虫学习记录(3)——用Python获取虾米加心歌曲,并获取MP3下载地址
- python 爬虫 批量获取代理ip
- Python基础爬虫之抓取可用的IP
- Python爬虫天气预报(小白入门)
- 查看可用ip地址
- 用python获取本地的ip地址
- Python获取本机IP地址
- Python获取本机Ip地址
- python 获取linux 本机IP地址
- python获取局域网内计算机IP地址
- Windows程序设计:直线绘制
- linux下yum使用本地光盘做为安装源
- 【Hive】hive-2.1.1内嵌模式安装配置全过程
- 集合类
- python数据类型
- python 3 爬虫获取可用ip地址(小白)
- Centos装MySQL5.6
- Linux学习7:文件系统操作与磁盘管理
- Spark Streaming: 保存上一个批次数据的计算结果
- Bubble_sort
- iOS 用keychain钥匙串保存账号、设备UUID及APP间共享
- Java多态
- JAVA连接池的作用与C3P0连接池的使用
- java 多态