最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python掃描proxy并獲取可用代理ip的實例

 更新時間:2017年08月07日 08:34:20   投稿:jingxian  
下面小編就為大家?guī)硪黄猵ython掃描proxy并獲取可用代理ip的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

今天咱寫一個挺實用的工具,就是掃描并獲取可用的proxy

首先呢,我先百度找了一個網(wǎng)站:http://www.xicidaili.com 作為例子

這個網(wǎng)站里公布了許多的國內(nèi)外可用的代理的ip和端口

我們還是按照老樣子進行分析,就先把所有國內(nèi)的proxy掃一遍吧

點開國內(nèi)部分進行審查發(fā)現(xiàn),國內(nèi)proxy和目錄為以下url:

http://www.xicidaili.com/nn/x

這個x差不多兩千多頁,那么看來又要線程處理了。。。

老樣子,我們嘗試是否能直接以最簡單的requests.get()獲取內(nèi)容

返回503,那么我們加一個簡單的headers

返回200,成咯

好了我們先進行網(wǎng)頁內(nèi)容分析并獲取想要的內(nèi)容

我們發(fā)現(xiàn),包含ip信息的內(nèi)容在<tr>標簽內(nèi),于是我們就能很方便的用bs進行獲取標簽內(nèi)容

但是我們隨之又發(fā)現(xiàn),ip、端口、協(xié)議的內(nèi)容分別在提取的<tr>標簽的第2,3,6三個<td>標簽內(nèi)

于是我們開始嘗試編寫,一下為編寫思路:

  處理頁面的時候,是先提取tr標簽,再將tr標簽中的td標簽提取

  所以運用了兩次bs操作,并且第二次使用bs操作時需要進行str處理

  因為我們獲得tr之后,我們需要其中的2,3,6號的東西,

  但是當我們用一個for循環(huán)輸出的i并不能進行組的操作

  所以我們干脆分別對每一個td的soup進行第二次操作之后直接提取2,3,6

  提取之后,直接加上.string提取內(nèi)容即可

r = requests.get(url = url,headers = headers)

 soup = bs(r.content,"html.parser")
 data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')})

 for i in data:

  soup = bs(str(i),'html.parser')
  data2 = soup.find_all(name = 'td')
  ip = str(data2[1].string)
  port = str(data2[2].string)
  types = str(data2[5].string).lower() 

  proxy = {}
  proxy[types] = '%s:%s'%(ip,port)

這樣,我們每次循環(huán)都能生成對應(yīng)的proxy字典,以便我們接下來驗證ip可用性所使用

字典這兒有個注意點,我們有一個將types變?yōu)樾懙牟僮鳎驗樵趃et方法中的proxies中寫入的協(xié)議名稱應(yīng)為小寫,而網(wǎng)頁抓取的是大寫的內(nèi)容,所以進行了一個大小寫轉(zhuǎn)換

那么驗證ip可用性的思路呢

很簡單,我們使用get,加上我們的代理,請求網(wǎng)站:

http://1212.ip138.com/ic.asp

這是一個神奇的網(wǎng)站,能返回你的外網(wǎng)ip是什么

url = 'http://1212.ip138.com/ic.asp'
r = requests.get(url = url,proxies = proxy,timeout = 6)

這里我們需要加上timeout去除掉那些等待時間過長的代理,我設(shè)置為6秒

我們以一個ip進行嘗試,并且分析返回的頁面

返回的內(nèi)容如下:

<html>

<head>

<meta xxxxxxxxxxxxxxxxxx>

<title> 您的IP地址 </title>

</head>

<body style="margin:0px"><center>您的IP是:[xxx.xxx.xxx.xxx] 來自:xxxxxxxx</center></body></html>

那么我們只需要提取出網(wǎng)頁內(nèi)[]的內(nèi)容即可

如果我們的代理可用,就會返回代理的ip

(這里會出現(xiàn)返回的地址還是我們本機的外網(wǎng)ip的情況,雖然我也不是很清楚,但是我把這種情況排除,應(yīng)該還是代理不可用)

那么我們就能進行一個判斷,如果返回的ip和proxy字典中的ip相同,則認為這個ip是可用的代理,并將其寫入文件

我們的思路就是這樣,最后進行queue和threading線程的處理即可

上代碼:

#coding=utf-8

import requests
import re
from bs4 import BeautifulSoup as bs
import Queue
import threading 

class proxyPick(threading.Thread):
 def __init__(self,queue):
  threading.Thread.__init__(self)
  self._queue = queue

 def run(self):
  while not self._queue.empty():
   url = self._queue.get()

   proxy_spider(url)

def proxy_spider(url):
 headers = {
   .......
  }

 r = requests.get(url = url,headers = headers)
 soup = bs(r.content,"html.parser")
 data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')})

 for i in data:

  soup = bs(str(i),'html.parser')
  data2 = soup.find_all(name = 'td')
  ip = str(data2[1].string)
  port = str(data2[2].string)
  types = str(data2[5].string).lower() 


  proxy = {}
  proxy[types] = '%s:%s'%(ip,port)
  try:
   proxy_check(proxy,ip)
  except Exception,e:
   print e
   pass

def proxy_check(proxy,ip):
 url = 'http://1212.ip138.com/ic.asp'
 r = requests.get(url = url,proxies = proxy,timeout = 6)

 f = open('E:/url/ip_proxy.txt','a+')

 soup = bs(r.text,'html.parser')
 data = soup.find_all(name = 'center')
 for i in data:
  a = re.findall(r'\[(.*?)\]',i.string)
  if a[0] == ip:
   #print proxy
   f.write('%s'%proxy+'\n')
   print 'write down'
   
 f.close()

#proxy_spider()

def main():
 queue = Queue.Queue()
 for i in range(1,2288):
  queue.put('http://www.xicidaili.com/nn/'+str(i))

 threads = []
 thread_count = 10

 for i in range(thread_count):
  spider = proxyPick(queue)
  threads.append(spider)

 for i in threads:
  i.start()

 for i in threads:
  i.join()

 print "It's down,sir!"

if __name__ == '__main__':
 main()

這樣我們就能把網(wǎng)站上所提供的能用的代理ip全部寫入文件ip_proxy.txt文件中了

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

相關(guān)文章

  • python獲得兩個數(shù)組交集、并集、差集的方法

    python獲得兩個數(shù)組交集、并集、差集的方法

    這篇文章主要介紹了python獲得兩個數(shù)組交集、并集、差集的方法,實例分析了Python操作list集合的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 詳解python tkinter教程-事件綁定

    詳解python tkinter教程-事件綁定

    這篇文章主要介紹了python tkinter事件綁定,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 舉例講解Python面向?qū)ο缶幊讨蓄惖睦^承

    舉例講解Python面向?qū)ο缶幊讨蓄惖睦^承

    類是面向?qū)ο笳Z言中的標配,同樣類的繼承也是體現(xiàn)面向?qū)ο蟮闹匾匦?這里我們就來舉例講解Python面向?qū)ο缶幊讨蓄惖睦^承,需要的朋友可以參考下
    2016-06-06
  • 30秒學會30個超實用Python代碼片段【收藏版】

    30秒學會30個超實用Python代碼片段【收藏版】

    許多人在數(shù)據(jù)科學、機器學習、web開發(fā)、腳本編寫和自動化等領(lǐng)域中都會使用Python,它是一種十分流行的語言。本文將簡要介紹30個簡短的、且能在30秒內(nèi)掌握的代碼片段,感興趣的朋友一起看看吧
    2019-10-10
  • 樹莓派中python獲取GY-85九軸模塊信息示例

    樹莓派中python獲取GY-85九軸模塊信息示例

    本文內(nèi)容是樹莓派中python獲取GY-85九軸模塊信息的示例,這里使用Python的curses包開發(fā)cli窗口程序,用來實時刷新傳感器的讀數(shù),下面看代碼
    2013-12-12
  • Python3.6+Django2.0以上 xadmin站點的配置和使用教程圖解

    Python3.6+Django2.0以上 xadmin站點的配置和使用教程圖解

    django自帶的admin站點雖然功能強大,但是界面不是很好看。這篇文章主要介紹了Python3.6+Django2.0以上 xadmin站點的配置和使用 ,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • django實現(xiàn)分頁的方法

    django實現(xiàn)分頁的方法

    這篇文章主要介紹了django實現(xiàn)分頁的方法,實例分析了django分頁的技巧與Paginator對象的用法,需要的朋友可以參考下
    2015-05-05
  • 詳解Python模塊化--模塊(Modules)和包(Packages)

    詳解Python模塊化--模塊(Modules)和包(Packages)

    這篇文章主要介紹了使用Python的模塊(Modules)和包(Packages),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • python hook監(jiān)聽事件詳解

    python hook監(jiān)聽事件詳解

    這篇文章主要為大家詳細介紹了python hook監(jiān)聽事件的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Python字典高級用法深入分析講解

    Python字典高級用法深入分析講解

    字典作為Python的一個內(nèi)置數(shù)據(jù)結(jié)構(gòu),和列表一樣都是可變序列的,但是它是無序的,以鍵值對的方式存儲數(shù)據(jù)。本文將詳解一下Python中字典的高級使用,需要的可以參考一下
    2022-10-10

最新評論

墨玉县| 莆田市| 乌鲁木齐县| 绥化市| 灵川县| 赫章县| 腾冲县| 凭祥市| 毕节市| 洛阳市| 津市市| 沙坪坝区| 田林县| 余庆县| 封丘县| 新郑市| 万源市| 修水县| 突泉县| 刚察县| 碌曲县| 甘泉县| 连城县| 富裕县| 阿克陶县| 梁河县| 启东市| 沈阳市| 柳江县| 吉安县| 嘉义县| 那曲县| 康平县| 东阿县| 遂宁市| 门头沟区| 阳山县| 长海县| 固镇县| 凉山| 深圳市|