Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解析器正在工作,但在我的上一个结果中出现索引超出范围错误,无法将列表保存到文件中_Python_Parsing_Scraper - Fatal编程技术网

Python解析器正在工作,但在我的上一个结果中出现索引超出范围错误,无法将列表保存到文件中

Python解析器正在工作,但在我的上一个结果中出现索引超出范围错误,无法将列表保存到文件中,python,parsing,scraper,Python,Parsing,Scraper,我编写了一个Python脚本来解析本地场馆的节目信息,以便在主屏幕上显示更新的议程 所有打印结果都正常,但我得到了一个字符串索引超出范围的错误,我认为这是最后一个结果 代码如下。我非常感谢您能帮助我澄清这一具体错误 import urllib.request import bs4 as bs #READ THE DESIRED URL sauce = urllib.request.urlopen('http://www.coliseu.pt/agenda/').read() #PARSE T

我编写了一个Python脚本来解析本地场馆的节目信息,以便在主屏幕上显示更新的议程

所有打印结果都正常,但我得到了一个字符串索引超出范围的错误,我认为这是最后一个结果

代码如下。我非常感谢您能帮助我澄清这一具体错误

import urllib.request
import bs4 as bs

#READ THE DESIRED URL
sauce = urllib.request.urlopen('http://www.coliseu.pt/agenda/').read()

#PARSE THE HTML
soup = bs.BeautifulSoup(sauce, 'lxml')

#RESULTS WILL HOLD THE INFORMATION PARSED
results = []

#FIND ALL DIVS WITH CLASS BL-BLOCK, GATHER ALL THE TEXT
#AND CHECK FOR THE APROPRIATE RETURNS TO AVOID DUPLICATE FIELDS
for div in soup.find_all('div', class_='bl-block'):
    row = [i.text for i in div]
    #FOR DEBUGGING
    print(row)
    if len(row) == 3 and row[2][0].isdigit():
        results.append(row)



#SAVE RESULTS TO FILE IF ANY ARE FOUND
if len(results) > 0:
    file = open('testfile.txt', 'w')
    for line in results:
        file.write(line + '\n')
    file.close()
我没有使用.txt文件写入方法,因为我无法通过此错误

在@Vahid解决了上述问题后,我现在在尝试将其保存到文件时出现编码错误

当我使用列表时,无法将列表直接写入文件,任何将列表转换为字符串的尝试都会导致相同的错误

无法找到将数据放入文件的方法

//更新 找出问题所在。我无法将\u0327字符编码为UTF-8,无法理解原因。字符是“ç”


尝试将其编码为UTF-8和ASCII,但未成功。如果您能提供任何帮助,我将不胜感激。

尝试更改if语句,如下所示:
如果len(row)==3和len(row[2])以及row[2][0]。isdigit():
您可能遇到了长度为零的数组项。乍一看,我认为您需要将第[2][[0]行包围起来在try-catch as-while-len行中,确保第一个索引有效,第二个索引没有检查,它可能为空。您的代码似乎没有任何
print
s,您可以在错误发生之前查看变量的状态。这是调试中的第1步。抱歉,在发布之前删除了print语句。我将照样更新它在上,我测试了Vahid的建议。嗯,看到你现在用打印语句更新了代码。但是你可能看不到有问题的行,因为你可能无法在if块中找到打印语句,因为测试本身会给你错误。你应该在if块之前打印行。