本文共 3664 字,大约阅读时间需要 12 分钟。
哈喽,大家好,我是一条。
在线旅游这个行业,价格是永恒不变的战略,获取对方价格的有效手段就是爬虫。
有爬虫就有反爬虫,最直接的就是封你ip,大门一关,”闭关锁国“。
这时候找个替身无疑是最好的办法,用个障眼法躲过对方的排查。
代理ip就是专门干这个的,先把请求发给代理ip,让代理ip替我们访问目标服务器。
今天就教大家怎么打造自己的ip代理池。
以下代理网站均免费,所以质量你懂的
代理名称 | 状态 | 更新速度 | 可用率 | 地址 | 代码 |
---|---|---|---|---|---|
米扑代理 | ✔ | ★ | * | freeProxy01 | |
66代理 | ✔ | ★★ | * | freeProxy02 | |
Pzzqz | ✔ | ★ | * | freeProxy03 | |
神鸡代理 | ✔ | ★★★ | * | freeProxy04 | |
快代理 | ✔ | ☆ | * | freeProxy05 | |
极速代理 | ✔ | ★★★ | * | freeProxy06 | |
云代理 | ✔ | ★ | * | freeProxy07 | |
小幻代理 | ✔ | ★★ | * | freeProxy08 | |
免费代理库 | ✔ | ☆ | * | freeProxy09 | |
89代理 | ✔ | ☆ | * | freeProxy13 | |
西拉代理 | ✔ | ★★ | * | freeProxy14 |
1.利用requests
获取对应地址的respond
2.xpath
解析返回值
3.访问指定网址(比如百度)判断ip是否可用
4.将可用的ip存入文件
5.将脚本放到服务器,设置定时任务,每天爬取最新可用ip
完整代码微信搜【一条IT】
# -*- coding: utf-8 -*-# Date: 2021/6/5 11:14# Author: libiao# wechat: 一条IT# Software: PyCharmimport reimport timeimport requestsfrom webRequest import WebRequestdef getHtml(proxy): # .... retry_count = 1 while retry_count > 0: try: html = requests.get('http://www.baidu.com', proxies={ "http": "http://{}".format(proxy)}) # 使用代理访问 print(html) except Exception as e: print(e) retry_count -= 1def freeProxy01(): """ 米扑代理 https://proxy.mimvp.com/ :return: """ url_list = [ 'https://proxy.mimvp.com/freeopen', 'https://proxy.mimvp.com/freeopen?proxy=in_tp' ] iplist=[] port_img_map = { 'DMxMjg': '3128', 'Dgw': '80', 'DgwODA': '8080', 'DgwOA': '808', 'DgwMDA': '8000', 'Dg4ODg': '8888', 'DgwODE': '8081', 'Dk5OTk': '9999'} for url in url_list: html_tree = WebRequest().get(url).tree for tr in html_tree.xpath(".//table[@class='mimvp-tbl free-proxylist-tbl']/tbody/tr"): try: ip = ''.join(tr.xpath('./td[2]/text()')) port_img = ''.join(tr.xpath('./td[3]/img/@src')).split("port=")[-1] port = port_img_map.get(port_img[14:].replace('O0O', '')) if port: ipPort=ip+":"+port print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),ipPort) getHtml(ipPort) except Exception as e: print(e)def freeProxy02(): """ 代理66 http://www.66ip.cn/ :return: """ url = "http://www.66ip.cn/mo.php" resp = WebRequest().get(url, timeout=10) proxies = re.findall(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5})', resp.text) for proxy in proxies: print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),proxy) getHtml(proxy)def freeProxy04(): """ 神鸡代理 http://www.shenjidaili.com/ :return: """ url = "http://www.shenjidaili.com/product/open/" tree = WebRequest().get(url).tree for table in tree.xpath("//table[@class='table table-hover text-white text-center table-borderless']"): for tr in table.xpath("./tr")[1:]: proxy = ''.join(tr.xpath("./td[1]/text()")).strip() print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),proxy) getHtml(proxy)if __name__ == '__main__': # freeProxy02() with open("proxyPool","a+") as f: iplist=f.readlines() for ip in iplist: print(ip) getHtml(ip.strip())
crontab -e 编辑定时任务 按i进入编辑crontab -l 查询所有的定时任务crontab文件格式: * * * * * filenameminute hour day month week filename分 时 天 月 星期 脚本文件如果想每分钟都执行一次的话就采用默认的 * * * * *如果想每五分钟执行一次可以 */5 * * * * 如果是每两个小时执行一次的话就是 * */2 * * *来
示例
上图的意思是每天9:20执行 /gis/home/syncScripts/gs_zb.sh脚本
以上,代理ip池构建完成,放在服务器上每天重跑。没有服务器的同学可参考这篇
感谢各位粉丝的支持,一条最近工作上遇到些困难,更新可能会比较慢,大约半个月后会恢复正常。
我是一条,一个在互联网摸爬滚打的程序员。
道阻且长,行则将至。大家的 【点赞,收藏,关注】 就是一条创作的最大动力,我们下期见!
注:关于本篇博客有任何问题和建议,欢迎大家留言!
转载地址:http://sbvsi.baihongyu.com/