Python 使用范围时嵌入For循环

Python 使用范围时嵌入For循环,python,Python,我希望下面的命令从这个范围内的地址获取日期,但我似乎无法让它运行多次。我正在使用Python3。正如您在下面看到的,该站点的url附加了i作为待阅读。。。等等代码如下: import bs4 as bs import urllib.request site = "http://zinc.docking.org/substance/" for i in range(10, 16): site1 = str("%s%i" % (site, i)) sauce = urllib.re

我希望下面的命令从这个范围内的地址获取日期,但我似乎无法让它运行多次。我正在使用Python3。正如您在下面看到的,该站点的url附加了i作为待阅读。。。等等代码如下:

import bs4 as bs
import urllib.request
site = "http://zinc.docking.org/substance/"
for i in range(10, 16): 
    site1 = str("%s%i" % (site, i))
    sauce = urllib.request.urlopen(site1).read()
    soup = bs.BeautifulSoup(sauce, 'lxml')
    table1 = soup.find("table", attrs={"class": "substance-properties"})
for row in table1.findAll('tr'):
    row1 = row.findAll('td')
ate = row1[0].getText()
print(ate)
import bs4 as bs
import urllib.request
import pandas as pd
import csv
site = "http://zinc.docking.org/substance/"
for i in range(10, 16): 
    site1 = str("%s%i" % (site, i))
    sauce = urllib.request.urlopen(site1).read()
    soup = bs.BeautifulSoup(sauce, 'lxml')
    table1 = soup.find("table", attrs={"class": "substance-properties"})
    table2 = soup.find("table", attrs={"class": "protomers"})
    for row in table1.findAll('tr'):
        row1 = row.findAll('td')
        ate = row1[0].getText()
        print(ate)
这是我的输出:

$python3 Reset.py
November 11th, 2005
但是脚本应该给我3个日期。这段代码可以工作,所以我知道行[0]实际上包含一个值。我觉得有一些简单的格式错误,但我不确定从哪里开始疑难解答。当我将其“正确”格式化时,代码如下:

import bs4 as bs
import urllib.request
site = "http://zinc.docking.org/substance/"
for i in range(10, 16): 
    site1 = str("%s%i" % (site, i))
    sauce = urllib.request.urlopen(site1).read()
    soup = bs.BeautifulSoup(sauce, 'lxml')
    table1 = soup.find("table", attrs={"class": "substance-properties"})
for row in table1.findAll('tr'):
    row1 = row.findAll('td')
ate = row1[0].getText()
print(ate)
import bs4 as bs
import urllib.request
import pandas as pd
import csv
site = "http://zinc.docking.org/substance/"
for i in range(10, 16): 
    site1 = str("%s%i" % (site, i))
    sauce = urllib.request.urlopen(site1).read()
    soup = bs.BeautifulSoup(sauce, 'lxml')
    table1 = soup.find("table", attrs={"class": "substance-properties"})
    table2 = soup.find("table", attrs={"class": "protomers"})
    for row in table1.findAll('tr'):
        row1 = row.findAll('td')
        ate = row1[0].getText()
        print(ate)
我得到的错误如下:

Traceback (most recent call last):
File "Reset.py", line 14, in <module>
ate = row1[0].getText()
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“Reset.py”,第14行,在
ate=row1[0]。getText()
索引器:列表索引超出范围

第一个代码起作用,因此我知道行[0]实际上包含一个值。有什么想法吗?

问题是,当你第一次进入循环时,你会发现所有的“td”元素。表的标题将不包含任何内容,因为它们是“th”,因此返回的列表的长度为0,这就是为什么索引超出范围的原因。您还需要验证该表是否没有返回非类型(根据您输入的代码,我不知道您对table2做了什么,但检查应该是相同的):


请检查您粘贴的代码,它与回溯不匹配在任何情况下,您都需要在访问索引0之前检查
行1
,或
len(row1)>0
以访问索引1…第一个代码工作的事实只是告诉您
行[0]
包含最后一行的值。第二个代码需要对所有行都为真。@PRMoureu我不知道你的意思是什么?@JohnColeman你是说如果对每个站点的所有行都为真吗?martinB0103谢谢