Linux服務(wù)器端怎么設(shè)置Python爬蟲代理腳本

本篇文章為大家展示了Linux服務(wù)器端怎么設(shè)置Python爬蟲代理腳本,代碼簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、費(fèi)縣網(wǎng)站維護(hù)、網(wǎng)站推廣。

在linux端的網(wǎng)絡(luò)爬蟲有時需要利用代理,而且有些網(wǎng)站碰到一些IE才有的bug時候不得不換瀏覽,還要開虛擬機(jī)進(jìn)去搞IE6、IE8、360、搜狗這些瀏覽器。建議搞個bat腳本來做這些。

具體實現(xiàn)步驟如下:

安裝pywin32、WMI支持。具體下載地址Google一下,因為我的是32位python2.7系列,下載到的文件名分別為(pywin32-218.win32-py2.7.exe、WMI-1.4.7.win32.exe)

首先,我們查資料知道,IE瀏覽器的代理內(nèi)容在注冊表中『HKEYCURRENTUSER\Software\Microsoft\Windows\CurrentVersion\Internet Settings』這里存著,所以我們理論上只要修改這里相關(guān)的鍵值就可以切換IE代理。

所以,第一個函數(shù)就是修改注冊表鍵值:

def changeIEProxy(keyName, keyValue):
 
  pathInReg = 'Software\Microsoft\Windows\CurrentVersion\Internet Settings'
 
  key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,pathInReg, 0, win32con.KEY_ALL_ACCESS)
 
  win32api.RegSetValueEx(key, keyName, 0, win32con.REG_SZ, keyValue)
 
  win32api.RegCloseKey(key)

因此段代碼中用到了pywin32的的東西,所以在文件最開頭需要做import win32api, win32con,引入相關(guān)的class

修改系統(tǒng)注冊表的函數(shù)其實就這么幾行…當(dāng)然,因為我廠必須通過代理服務(wù)器上網(wǎng),所以修改系統(tǒng)注冊表的鍵值類型我只用到了REG_SZ這一種,實際其他情況還會有REG_DWORD啊等等類型。

然后咱需要一個配置文件,來保存各種場景『QA啊開發(fā)環(huán)境啊』的不同的配置信息,這時候我使用的配置文件為ini格式,用Python自帶的ConfigParser就可以解析此種文件格式。

沒有采用以往我最熟悉的XML或者json純粹為了裝x,xml和json總覺著是web上用的東西,ini看起來比較像一個.exe比較常用的配置文件格式。

也因為以前沒用過ini格式的配置文件,這次權(quán)當(dāng)又學(xué)會一種Python的玩法而已。

所以讀取ini配置文件的代碼為:

config = ConfigParser.ConfigParser()
 
config.read('config.ini')
 
if config.has_section(_section):
 
  _ProxyServer = config.get(_section, 'ProxyServer')
 
  _ProxyOverride = config.get(_section, 'ProxyOverride')

同樣,因為用到了ConfigParser,需要在文件最開頭也import ConfigParser一下。

細(xì)心的小伙伴會注意到這段代碼中有一個_section的變量實際是沒有定義的,而這個變量俺給它的含義是前邊所寫的『場景』,比如_section=='dev'表示開發(fā)環(huán)境,_section=='qa'表示QA環(huán)境,而咱們這次既然做的是一個類似exe的程序,所以_section需要在執(zhí)行exe時候當(dāng)作參數(shù)傳進(jìn)來。

這時候咱們就要用到Python的sys模塊了,同樣import sys,然后在程序中通過:

_section = sys.argv[1] if len(sys.argv) > 1 else 'dev'

這樣的方式來獲取『場景』這個參數(shù),這一段代碼就會變成:

_section = sys.argv[1] if len(sys.argv) > 1 else 'dev'
 
config = ConfigParser.ConfigParser()
 
config.read('config.ini')
 
if config.has_section(_section):
 
  _ProxyServer = config.get(_section, 'ProxyServer')
 
  _ProxyOverride = config.get(_section, 'ProxyOverride')

既然已經(jīng)讀取到配置文件中的ProxyServer和ProxyOverride,寫入到注冊表理論上就能完成咱們的修改IE代理配置的大業(yè)了:

_section = sys.argv[1] if len(sys.argv) > 1 else 'dev'
 
config = ConfigParser.ConfigParser()
 
config.read('config.ini')
 
if config.has_section(_section):
 
  _ProxyServer = config.get(_section, 'ProxyServer')
 
  _ProxyOverride = config.get(_section, 'ProxyOverride')
 
  changeIEProxy('ProxyServer', _ProxyServer)
 
  changeIEProxy('ProxyOverride', _ProxyOverride)

因為注冊表內(nèi)容雖然已經(jīng)修改了,但實際上IE瀏覽器并沒有生效,讓IE瀏覽器生效需要關(guān)閉重新打開。

這時候就用到前邊安裝WMI,import wmi ctypes,然后:

def kill_ie():
 
  c = wmi.WMI()
 
  kernel32 = ctypes.windll.kernel32
 
  for process in c.Win32_Process():
 
    if process.Name=='iexplore.exe':
 
      kernel32.TerminateProcess(kernel32.OpenProcess(1, 0, process.ProcessId), 0)

當(dāng)然,這段代碼是有一點點問題的,只關(guān)閉了IE沒有重新打開

綜上所述:

完整的代碼為:

#coding=utf-8
 
import win32api, win32con, sys, ConfigParser, os, wmi, ctypes
 
def kill_ie():
 
  c = wmi.WMI()
 
  kernel32 = ctypes.windll.kernel32
 
  for process in c.Win32_Process():
 
    if process.Name=='iexplore.exe':
 
      kernel32.TerminateProcess(kernel32.OpenProcess(1, 0, process.ProcessId), 0)
 
def changeIEProxy(keyName, keyValue):
 
  pathInReg = 'Software\Microsoft\Windows\CurrentVersion\Internet Settings'
 
  key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,pathInReg, 0, win32con.KEY_ALL_ACCESS)
 
  win32api.RegSetValueEx(key, keyName, 0, win32con.REG_SZ, keyValue)
 
  win32api.RegCloseKey(key)
 
def check_config():
 
  if not os.path.isfile('config.ini'):
 
    cfg = ConfigParser.ConfigParser()
 
    #開發(fā)環(huán)境
 
    cfg.add_section('dev')
 
    cfg.set('dev', 'ProxyServer', '192.168.0.6:3128')
 
    cfg.set('dev', 'ProxyOverride', 'localhost;127.0.0.1')
 
    #預(yù)上線
 
    cfg.add_section('prepare')
 
    cfg.set('prepare', 'ProxyServer', '192.168.0.6:3128')
 
    cfg.set('prepare', 'ProxyOverride', 'localhost;127.0.0.1;')
 
    #線上
 
    cfg.add_section('online')
 
    cfg.set('online', 'ProxyServer', '192.168.0.6:3128')
 
    cfg.set('online', 'ProxyOverride', 'localhost;127.0.0.1')
 
    #QA
 
    cfg.add_section('qa')
 
    cfg.set('qa', 'ProxyServer', '192.168.2.16:3128')
 
    cfg.set('qa', 'ProxyOverride', 'localhost;127.0.0.1')
 
    cfg.write(open('config.ini', 'a'))
 
    return False
 
  return True
 
if __name__ == "__main__":
 
  _section = sys.argv[1] if len(sys.argv) > 1 else 'dev'
 
  if check_config():
 
    kill_ie()
 
    config = ConfigParser.ConfigParser()
 
    config.read('config.ini')
 
    if config.has_section(_section):
 
      _ProxyServer = config.get(_section, 'ProxyServer')
 
      _ProxyOverride = config.get(_section, 'ProxyOverride')
 
      changeIEProxy('ProxyServer', _ProxyServer)
 
      changeIEProxy('ProxyOverride', _ProxyOverride)
 
    print 'done, open ie'
 
  else:
 
    print 'config.ini is created, modify config.ini and try again'

上述內(nèi)容就是Linux服務(wù)器端怎么設(shè)置Python爬蟲代理腳本,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標(biāo)題:Linux服務(wù)器端怎么設(shè)置Python爬蟲代理腳本
路徑分享:http://muchs.cn/article18/jojjgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗App開發(fā)、企業(yè)建站、網(wǎng)站排名、網(wǎng)站維護(hù)品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計