欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python獲取代理IP的實例分享

 更新時間:2018年05月07日 09:53:02   作者:HelloHaibo  
今天小編就為大家分享一篇python獲取代理IP的實例分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

平時當我們需要爬取一些我們需要的數(shù)據(jù)時,總是有些網(wǎng)站禁止同一IP重復(fù)訪問,這時候我們就應(yīng)該使用代理IP,每次訪問前偽裝自己,讓“敵人”無法察覺。

oooooooooooooooOK,讓我們愉快的開始吧!

這個是獲取代理ip的文件,我將它們模塊化,分為三個函數(shù)

注:文中會有些英文注釋,是為了寫代碼方便,畢竟英文一兩個單詞就ok了

#!/usr/bin/python
#-*- coding:utf-8 -*-
"""
author:dasuda
"""
import urllib2
import re
import socket
import threading
findIP = [] #獲取的原始IP數(shù)據(jù)
IP_data = [] #拼接端口后的IP數(shù)據(jù)
IP_data_checked = [] #檢查可用性后的IP數(shù)據(jù)
findPORT = [] #IP對應(yīng)的端口
available_table = [] #可用IP的索引
def getIP(url_target):
 patternIP = re.compile(r'(?<=<td>)[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}')
 patternPORT = re.compile(r'(?<=<td>)[\d]{2,5}(?=</td>)')
 print "now,start to refresh proxy IP..."
 for page in range(1,4):
  url = 'http://www.xicidaili.com/nn/'+str(page)
  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"}
  request = urllib2.Request(url=url, headers=headers)
  response = urllib2.urlopen(request)
  content = response.read()
  findIP = re.findall(patternIP,str(content))
  findPORT = re.findall(patternPORT,str(content))
  #assemble the ip and port
  for i in range(len(findIP)):
   findIP[i] = findIP[i] + ":" + findPORT[i]
   IP_data.extend(findIP)
  print('get page', page)
 print "refresh done!!!"
 #use multithreading
 mul_thread_check(url_target)
 return IP_data_checked
def check_one(url_check,i):
 #get lock
 lock = threading.Lock()
 #setting timeout
 socket.setdefaulttimeout(8)
 try:
  ppp = {"http":IP_data[i]}
  proxy_support = urllib2.ProxyHandler(ppp)
  openercheck = urllib2.build_opener(proxy_support)
  urllib2.install_opener(openercheck)
  request = urllib2.Request(url_check)
  request.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; WOW64)")
  html = urllib2.urlopen(request).read()
  lock.acquire()
  print(IP_data[i],'is OK')
  #get available ip index
  available_table.append(i)
  lock.release()
 except Exception as e:
  lock.acquire()
  print('error')
  lock.release()
def mul_thread_check(url_mul_check):
 threads = []
 for i in range(len(IP_data)):
  #creat thread...
  thread = threading.Thread(target=check_one, args=[url_mul_check,i,])
  threads.append(thread)
  thread.start()
  print "new thread start",i
 for thread in threads:
  thread.join()
 #get the IP_data_checked[]
 for error_cnt in range(len(available_table)):
  aseemble_ip = {'http': IP_data[available_table[error_cnt]]}
  IP_data_checked.append(aseemble_ip)
 print "available proxy ip:",len(available_table)

一、getIP(url_target):主要函數(shù) 傳入?yún)?shù)是:驗證代理IP可用性的網(wǎng)址,推薦ipchina

獲取代理IP,從http://www.xicidaili.com/nn/網(wǎng)站獲取,它是一個提供免費代理IP的網(wǎng)站,但是里面的IP不是全都能用,而且結(jié)合你的實際地理位置、網(wǎng)絡(luò)情況、訪問的目標服務(wù)器等情況,能用的大概不到20%,至少我的情況是這樣。

訪問http://www.xicidaili.com/nn/網(wǎng)站使用正常方式,返回的網(wǎng)頁內(nèi)容通過正則查詢獲得需要的IP和對應(yīng)端口,代碼如下:

patternIP = re.compile(r'(?<=<td>)[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}')
patternPORT = re.compile(r'(?<=<td>)[\d]{2,5}(?=</td>)')
...
findIP = re.findall(patternIP,str(content))
findPORT = re.findall(patternPORT,str(content))

關(guān)于如何構(gòu)造正則表達式,可以參考其他的文章:

獲取的IP保存在findIP中,對應(yīng)的端口在findPORT中,兩者按索引對應(yīng),獲取一頁IP正常數(shù)量為100.

接下來進行IP和端口拼接

最后進行可用性檢查

二、check_one(url_check,i):線程函數(shù)

本次訪問url_check還是使用正常方式訪問,當訪問網(wǎng)頁有返回時,則說明本代理IP可用,則記錄下當前索引值,用于后面將所有可用IP取出。

三、mul_thread_check(url_mul_check):多線程生成

本函數(shù)開啟多線程檢查代理IP可用性,每個IP開啟一個線程進行檢查。

本工程直接調(diào)用getIP(),并傳入用于檢查可用性的網(wǎng)址,即可返回一個列表,里面是經(jīng)可用性檢查的ip列表,格式為

['ip1:port1','ip2:port2',....]

以上這篇python獲取代理IP的實例分享就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實現(xiàn)各種郵件發(fā)送

    Python實現(xiàn)各種郵件發(fā)送

    這篇文章主要介紹了Python實現(xiàn)各種郵件發(fā)送,Python內(nèi)置對SMTP的支持,可以發(fā)送純文本郵件、HTML郵件以及帶附件的郵件,下文詳細實現(xiàn)過程需要的小伙伴可以參考一下
    2022-05-05
  • Python使用pyinstaller打包spec文件的方法詳解

    Python使用pyinstaller打包spec文件的方法詳解

    PyInstaller是一個用于將Python腳本打包成獨立的可執(zhí)行文件的工具,使用PyInstaller您可以將Python應(yīng)用程序轉(zhuǎn)換為可執(zhí)行文件,而無需用戶安裝Python解釋器或任何額外的庫,這篇文章主要給大家介紹了關(guān)于Python使用pyinstaller打包spec文件的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Python 日期時間datetime 加一天,減一天,加減一小時一分鐘,加減一年

    Python 日期時間datetime 加一天,減一天,加減一小時一分鐘,加減一年

    這篇文章主要介紹了Python 日期時間datetime 加一天,減一天,加減一小時一分鐘,加減一年,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python如何將自己的包上傳到PyPi并可通過pip安裝的方法步驟

    python如何將自己的包上傳到PyPi并可通過pip安裝的方法步驟

    本文主要介紹了python如何將自己的包上傳到PyPi并可通過pip安裝的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 利用Python函數(shù)實現(xiàn)一個萬歷表完整示例

    利用Python函數(shù)實現(xiàn)一個萬歷表完整示例

    這篇文章主要給大家介紹了關(guān)于如何利用Python函數(shù)實現(xiàn)一個萬歷表的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python壓縮和解壓縮zip文件

    Python壓縮和解壓縮zip文件

    這篇文章主要介紹了Python壓縮和解壓縮zip文件,本文直接給出實例代碼,需要的朋友可以參考下
    2015-02-02
  • pandas 讀取各種格式文件的方法

    pandas 讀取各種格式文件的方法

    今天小編就為大家分享一篇pandas 讀取各種格式文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • xshell會話批量遷移到mobaxterm的工具(python小工具)

    xshell會話批量遷移到mobaxterm的工具(python小工具)

    這篇文章主要介紹了xshell會話批量遷移到mobaxterm的工具,使用方法也超級簡單,本文通過python代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • OpenCV(python)版實現(xiàn)文本分割之水平投影法

    OpenCV(python)版實現(xiàn)文本分割之水平投影法

    本文主要介紹了OpenCV(python)版實現(xiàn)文本分割之水平投影法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python3基礎(chǔ)之基本數(shù)據(jù)類型概述

    Python3基礎(chǔ)之基本數(shù)據(jù)類型概述

    這篇文章主要介紹了Python3的基本數(shù)據(jù)類型,需要的朋友可以參考下
    2014-08-08

最新評論