【发布时间】:2017-03-30 13:12:20
【问题描述】:
我编写了一个小 Python 脚本,用有效的公共代理填充我的 proxychains.conf 文件。对于每个请求,会检索 10 个代理并将其添加到 proxychains.conf 中,此操作会执行 3 次,因此总共添加了 30 个代理。
当我编写脚本并将结果返回到标准输出时,一切都按预期工作 = 检索并返回了 30 个代理。但是,当我添加脚本的文件操作部分时,只有 10 个代理被写入文件。我仍在学习 Python,我尝试重新安排一些东西,但没有成功。我不知道是否:
- 我的柜台放错地方了?
- 我的文件操作放错地方了?
代码如下:
#!/usr/bin/env python3
import requests
import sys,os
proxy_file = '/etc/proxychains.conf'
base_url = 'http://proxy.tekbreak.com/10/json'
headers = {'user-agent':'Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20'}
def fetchprox():
pf = open(proxy_file, 'r')
lines = pf.readlines()
pf.close()
with open (proxy_file, 'w') as f:
del lines[69:]
f.writelines([item for item in lines[:-1]])
r = requests.get(base_url, headers=headers)
n = 0
while n < 10:
ip = r.json()[n]['ip']
port = r.json()[n]['port']
p_type = r.json()[n]['type']
#output to proxychains.conf
f.writelines(str(p_type + " " + ip + " " + port + "\n"))
n += 1
for i in range(0,3):
fetchprox()
感谢您的帮助!
编辑 我根据佐丹奴的回答找到了一个解决方案,但我相信它可以更好地实施。为了写入一些数据,必须访问该文件 3 次似乎是多余的。所以这里是被改变的脚本部分:
<--snip->
pf = open(proxy_file, 'r')
lines = pf.readlines()
pf.close()
f = open (proxy_file, 'w')
del lines[69:]
f.writelines([item for item in lines[:-2]])
f.close()
def fetchprox():
with open (proxy_file, 'a') as f:
r = requests.get(base_url, headers=headers)
n = 0
while n < 10:
<--snip-->
那么有没有更有效的方法来实现这一点?
【问题讨论】:
-
尝试用 open (proxy_file, 'w') as f: 改变 open (proxy_file, 'a') as f:。可能你每次都覆盖文件
-
如我所见,您从
proxy_file读取代理列表并将结果写入 same 文件。你覆盖它,所以在第一次迭代之后只剩下 10 行。不管循环运行多少次,它总是 10 行。
标签: python file-io proxy python-requests