1. 程式人生 > >爬蟲代理設定--爬取ip池、驗證ip是否可用、驗證代理ip是否能用

爬蟲代理設定--爬取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)
這樣就可以偽裝自己。