[英]Python 3.x, need help iterating through a proxy text file line by line
我是python的新手,我正在嘗試構建一個程序,該程序可以使用代理從文本文件中的代理列表中使用代理訪問網站,並繼續對文件中的每個代理進行操作,直到全部使用完畢。 我在網上找到了一些代碼,並根據自己的需要進行了調整,但是當我運行該程序時,代理已被成功使用,但是卻沒有被按順序使用。 無論出於何種原因,第一個代理都將連續使用兩次,然后使用第二個代理,然后再使用第一個,然后再使用第三個,等等。 它不會一一列出。
文本文件中的代理組織如下:
123.45.67.89:8080
987.65.43.21:8080
等等。 這是我正在使用的代碼:
from fake_useragent import UserAgent
import pyautogui
import webbrowser
import time
import random
import random
import requests
from selenium import webdriver
import os
import re
proxylisttext = 'proxylistlist.txt'
useragent = UserAgent()
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy_type", 1)
def Visiter(proxy1):
try:
proxy = proxy1.split(":")
print ('Visit using proxy :',proxy1)
profile.set_preference("network.proxy.http", proxy[0])
profile.set_preference("network.proxy.http_port", int(proxy[1]))
profile.set_preference("network.proxy.ssl", proxy[0])
profile.set_preference("network.proxy.ssl_port", int(proxy[1]))
profile.set_preference("general.useragent.override", useragent.random)
driver = webdriver.Firefox(firefox_profile=profile)
driver.get('https://www.iplocation.net/find-ip-address')
time.sleep(2)
driver.close()
except:
print('Proxy failed')
pass
def loadproxy():
try:
get_file = open(proxylisttext, "r+")
proxylist = get_file.readlines()
writeused = get_file.write('used')
count = 0
proxy = []
while count < 10:
proxy.append(proxylist[count].strip())
count += 1
for i in proxy:
Visiter(i)
except IOError:
print ("\n[-] Error: Check your proxylist path\n")
sys.exit(1)
def main():
loadproxy()
if __name__ == '__main__':
main()
就像我說的那樣,此代碼使用代理成功導航到ipchecker站點,但隨后沒有逐行進行,同一代理將被多次使用。 因此,我想更具體地講,如何確保該程序一個接一個地遍歷代理,而無需重復? 我已經詳盡搜索了一種解決方案,但找不到任何解決方案,因此將不勝感激。 謝謝。
您的問題出在這些嵌套循環上,它們似乎並沒有按照您想要的方式工作:
proxy = []
while count < 10:
proxy.append(proxylist[count].strip())
count += 1
for i in proxy:
Visiter(i)
外循環建立proxy
列表,每次添加一個值,直到有十個。 在添加每個值之后,內部循環將循環訪問到目前為止已構建的proxy
列表,並訪問每個項目。
我懷疑您想取消循環。 這樣, for
循環將僅在while
循環完成后運行,因此它將僅訪問每個代理一次。 嘗試這樣的事情:
proxy = []
while count < 10:
proxy.append(proxylist[count].strip())
count += 1
for i in proxy:
Visiter(i)
如果需要,可以將其簡化為一個循環。 例如,使用itertools.islice
處理邊界檢查,您可以執行以下操作:
for proxy in itertools.islice(proxylist, 10):
Visiter(proxy.strip())
您甚至可以直接在文件對象上運行它(因為文件是可迭代的),而不是先調用readlines
將其讀入列表。 (然后,您可能需要在寫"used"
之前在文件上添加一個seek
調用,但是無論如何,您可能需要這樣做,某些操作系統不允許您混合讀寫,而不能在兩者之間進行查找。)
while count < 10: proxy.append(proxylist[count].strip()) count += 1 for i in proxy: Visiter(i)
while循環中的for循環意味着每次您點擊proxy.append時,您都將為代理中已有的每個項目調用Visiter。 這也許可以解釋為什么您每個代理都獲得多次點擊。
至於亂序問題,我不確定為什么readlines()不能保持文件的行順序,但是我會嘗試類似的方法:
with open('filepath', 'r') as file: for line in file: do_stuff_with_line(line)
使用上述方法,您不需要一次將整個文件都保存在內存中,這對於大文件來說可能是不錯的選擇。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.