码迷,mamicode.com
首页 > 其他好文 > 详细

爬虫——代理

时间:2019-01-24 01:13:11      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:telnet   分享   代理   9.1   windows   image   --   like   mobile   

  服务器会自动检测某个IP在单位时间内的请求次数,如果超过了某个阀值,服务器就会拒绝当前IP的访问,返回一些错误信息。

这种情况,可以称之为被封IP。

  既然服务器检测的是某个IP单位时间内的请求次数,那么我们借助某种方式来伪装IP,让服务器无法识别由我们本机发起的请求,

这样就可以防止被封IP。

  一、获取代理并保存到本地

import requests
import re
import time
import random
import telnetlib

keys = [
    Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19,
    Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30,
    Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1,
    Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0,
    Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0,
    Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36,
    Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19,
    Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3,
    Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3
]

# 伪装浏览器
headers = {
    User-Agent: keys[random.randint(0, len(keys) - 1)]
}


# 批量获取高匿代理ip
def getXCProxyIp(max_page_number):
    for i in range(1, max_page_number + 1):
        page_number = i
        init_url = http://www.xicidaili.com/nn/ + str(i)
        req = requests.get(init_url, headers=headers)
        # 获取代理ip
        agency_ip_re = re.compile(
            r\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b, re.S)
        agency_ip = agency_ip_re.findall(req.text)
        # 获取代理ip的端口号
        agency_port_re = re.compile(<td>([0-9]{2,5})</td>, re.S)
        agency_port = agency_port_re.findall(req.text)
        # 高匿代理ip页面中所列出的ip数量
        ip_number = len(agency_ip)
        print(正在获取第 %d 页代理中(请耐心等候)...... % page_number)
        for i in range(ip_number):
            total_ip = agency_ip[i] + : + agency_port[i]
            print(total_ip)
            verifyProxyIP(agency_ip[i], agency_port[i])
            time.sleep(1)
        print(第 %d 页代理获取完毕! % page_number)
        print(------------------------------------)
        time.sleep(2)


# 验证获取到的代理IP是否可用
def verifyProxyIP(verify_ip, verify_ip_port):
    print(正在验证此代理IP是否可用......)
    try:
        telnetlib.Telnet(verify_ip, verify_ip_port, timeout=10)
    except:
        print(此代理IP不可用)
        print(-------------------------)
    else:
        print(此代理IP可用)
        print(-------------------------)
        available_ip = verify_ip + : + verify_ip_port
        saveProxyIP(available_ip)


# 将可用的代理IP保存到本地
def saveProxyIP(available_ip):
    with open(rC:\Users\Mr.Su\Desktop\XCProxy.txt, a) as f:
        f.write(available_ip + \n)


if __name__ == __main__:
    print(---------- 高匿代理ip获取 ----------)
    page = int(input(请输入您想获取的页数: ))
    getXCProxyIp(page)

 技术分享图片

 

     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二、使用代理

   Selenium设置代理包括两种方式:一种是有界面浏览器,以Chrome为例;另一种是以无界面浏览器,以PhantomJS为例。

#代理的使用
from selenium import webdriver

proxy = 119.101.113.171:9999
chrome_options = webdriver.ChromeOptions() #创建代理
chrome_options.add_argument(--proxy-server = http://+proxy)
browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe",options=chrome_options)
browser.get(http://httpbin.org/get)

 

爬虫——代理

标签:telnet   分享   代理   9.1   windows   image   --   like   mobile   

原文地址:https://www.cnblogs.com/2sheep2simple/p/10312190.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!