【问题标题】:How to fix IndexError: list index out of range proxy如何修复 IndexError:列表索引超出范围代理
【发布时间】:2019-06-26 19:31:49
【问题描述】:

我这里有一个免费代理的脚本,但现在出现错误:

Traceback(最近一次通话最后一次):

文件“proxi.py”,第 14 行,在

if (td[6].text=="no"): # 如果将“no”更改为“yes”,则会得到 https

IndexError: 列表索引超出范围

import requests
from bs4 import BeautifulSoup

out = ""
urls = ["http://www.us-proxy.org/","http://free-proxy-list.net/uk-proxy.html","http://free-proxy-list.net/anonymous-proxy.html"]
for url in urls:
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data, "html.parser")
tr = soup.find_all("tr")
for t in tr:
td = t.find_all("td")
if (td):
  if (td[6].text=="no"): # If you change "no" to "yes" you get https
    out+=(td[0].text+":"+td[1].text+"\n")
f = open("proxy.txt", "w")
f.write(out)
f.close()

【问题讨论】:

  • 错误来自哪里?请同时发布您的完整错误回溯并提供一个工作示例。
  • 请更正您的缩进
  • 在引用td[6]之前检查td的长度
  • IndexError 表示您正在执行此操作 someIterable[someIndex]someIterablesomeIndex 处没有值。在尝试访问该索引之前检查长度,或try/exceptIndexError
  • 我添加了整个错误。如何查看长度?

标签: python


【解决方案1】:

td 并不总是在点 6 处有索引

所以当你执行 td[6] 时,它会给你一个索引错误

查看这段代码,我打印出 td 的长度 https://onlinegdb.com/BkcnRSZgr

import requests
from bs4 import BeautifulSoup

out = ""
urls = ["http://www.us-proxy.org/","http://free-proxy-list.net/uk-proxy.html","http://free-proxy-list.net/anonymous-proxy.html"]
for url in urls:
    r = requests.get(url)
    data = r.text
    soup = BeautifulSoup(data, "html.parser")
    tr = soup.find_all("tr")
for t in tr:
    td = t.find_all("td")
    print(len(td))
    if (td):
        if (td[6].text=="yes"): # If you change "no" to "yes" you get https
            out+=(td[0].text+":"+td[1].text+"\n")
f = open("proxy.txt", "w")
f.write(out)
f.close()

这是我为正在发生的事情做的一个例子。 https://onlinegdb.com/HJIXlL-xH

希望它能帮助你更好地理解。

【讨论】:

  • 我不太明白,我的代码有以下问题:0 8 8 8 8 etc 8 8 .. Traceback(最近一次调用最后一次):文件“proxi2.py”,行15, in if (td[6].text=="yes"): # 如果你把“no”改成“yes”你会得到https IndexError: list index out of range
【解决方案2】:

这些 URL 共享相似的标记结构:

urls = ["http://www.us-proxy.org/","http://free-proxy-list.net/uk-proxy.html","http://free-proxy-list.net/anonymous-proxy.html"]

有一个 ID 为 proxylisttable 的表格,其中包含具有标题行和页脚行的代理列表。

我建议将tr 选择限制在此表中,例如

trs = bs.select("table#proxylisttable tr")
proxies = trs[1:-1] # exclude heading and footer

【讨论】:

  • 我应该在哪一行添加这个?
猜你喜欢
  • 2019-09-15
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2015-06-26
相关资源
最近更新 更多