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