繁体   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