簡體   English   中英

Python 3.x,需要幫助逐行遍歷代理文本文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM