爬虫代理设置--爬取ip池、验证ip是否可用、验证代理ip是否能用

昨天在爬取大众点评的时候,刚开始还好好的,但一会就把我的ip给封啦,所以我就想给自己弄一个ip池,这样我就可以继续爬啦。网上找了一堆代码,发现好多都是python2的,它们请求使用urllib2的库,这个库在python3中合并成urllib,所以很多方法调用都出现错误,所以我还是决定用requests。

一、获得代理ip

def get_ip_list(obj):
    ip_text = obj.findAll('tr', {'class': 'odd'})   # 获取带有IP地址的表格的所有行
    ip_list = []
    for i in range(len(ip_text)):
        ip_tag = ip_text[i].findAll('td')   
        ip_port = ip_tag[1].get_text() + ':' + ip_tag[2].get_text() # 提取出IP地址和端口号
        ip_list.append(ip_port)
    print("共收集到了{}个代理IP".format(len(ip_list)))
    print(ip_list)
    return ip_list
url = 'http://www.xicidaili.com/'
headers = {
    'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
request = Request(url, headers=headers)
response = urlopen(request)
bsObj = BeautifulSoup(response, 'lxml')     # 解析获取到的html
lists=get_ip_list(bsObj)

二、验证是否可用

def valVer(proxys):
    badNum = 0
    goodNum = 0
    good=[]
    for proxy in proxys:
        try:
            proxy_host = proxy
            protocol = 'https' if 'https' in proxy_host else 'http'
            proxies = {protocol: proxy_host}
            response = requests.get('http://www.baidu.com', proxies=proxies, timeout=2)
            if response.status_code != 200:
                badNum += 1
                print (proxy_host, 'bad proxy')
            else:
                goodNum += 1
                good.append(proxies)
                print (proxy_host, 'success proxy')
        except Exception as e:
            print( e)
            # print proxy_host, 'bad proxy'
            badNum += 1
            continue
    print ('success proxy num : ', goodNum)
    print( 'bad proxy num : ', badNum)
    return good

三、检查代理ip是否可用

res =requests.get('http://icanhazip.com/', proxies=go[0])
print (res.content)

注:我在找资料的时候我发现一个库fake_useragent,这个库可以伪装请求头,具体用法

from fake_useragent import UserAgent
ua = UserAgent()
#ie浏览器的user agent
print(ua.ie)

#opera浏览器
print(ua.opera)

#chrome浏览器
print(ua.chrome)

#firefox浏览器
print(ua.firefox)

#safri浏览器
print(ua.safari)

#最常用的方式
#写爬虫最实用的是可以随意变换headers,一定要有随机性。支持随机生成请求头
print(ua.random)
print(ua.random)
print(ua.random)
这样就可以伪装自己。


猜你喜欢

转载自blog.csdn.net/ssssdbucdbod/article/details/81038279