我正在抓取一个网页,并将输出写入.csv。我得到一个“列表索引超出范围”错误。我想我明白这个错误的意思,但我不知道如何改正它。你知道吗
包含我要迭代的容器的HTML代码如下所示:
<tr class="featured even" role="row"><td class="sorting_1 dcLogo">
<a href="company/company">
<img src="URL" alt="Company Name" width="50">
</a>
</td><td class="dcCompanyName"><a href="URL">Company Name</a></td><td class="dcBoothLabel">9999</td><td class="dcCategories">Widget 1, Widget 2, Widget 3</td><td class="dcCityState">CITY, STATE<br/></td><td class="dcCountry">US</td><td style="visibility:hidden;display:none;">4</td></tr>
我的代码如下所示:
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll('tr')
del containers[8]
company_names = []
booth_numbers = []
categories = []
countries = []
print("generating csv")
with open('CompanyList.csv','w') as f:
csv_out = csv.writer(f)
csv_out.writerow(["company_name", "booth_number", "category", "country"])
for container in containers:
cols = container.findAll("td")
company_name = cols[1].find("a").text
booth_number = cols[2].text
category = cols[3].text.strip()
country = cols[5].text
company_names.append(company_name)
booth_numbers.append(booth_number)
categories.append(category)
countries.append(country)
csv_out.writerow([company_name, booth_number, category, country])
f.close
print('Done Writing to File')
运行此操作时,出现“IndexError:list index out of range”错误,指向:
booth_number = cols[3].text
任何帮助都将不胜感激。你知道吗
列没有您假设的那么多。你知道吗
您可以使用
len(cols)
查看有多少列,并在此基础上,决定当预期的列不存在时要做什么。你知道吗请注意,在这之后,您将遇到与该行类似的问题。你知道吗
.csv文件中的某些行没有您期望的那么多列。看起来您认为列的数量应该是一致的,所以您只需在实际开始索引行之前进行检查,如下所示:
我假设将有7列,因为这是你计算的第一行是什么,但你可以改变它应该是什么。你知道吗
问题是cols数组的长度小于您试图访问的元素。在示例中
cols数组的长度不超过3,因为数组索引是基于零的(元素1的索引为0)。当您试图访问索引为3的第四个元素时,您正在访问范围之外的元素。你知道吗
您可以通过在访问元素之前检查长度来解决此问题。你知道吗
这样,如果展位号不在cols中,您的程序不会失败并停止。你知道吗
相关问题 更多 >
编程相关推荐