使用bs4从四个td标签中获取文本。代码在从实际页面下载的html上运行完美,但是在同一页面上在线运行时抛出“列表索引超出范围”错误。
这是相关的HTML,下面的代码片段如下。
<tr>
<td class="tdtitle" style="width:162px;">
Number:
</td>
<td>
<span id="SheetContentPlaceHolder_caseSummary_lblCaseNumber" class="summaryTextBox">[Case Number]</span>
</td>
</tr>
<tr>
<td class="tdtitle" style="width:162px;">
Status:
</td>
<td>
<span id="SheetContentPlaceHolder_caseSummary_lblCaseStatus" class="summaryTextBoxAlt">CASE OPEN</span>
</td>
</tr>
<tr>
<td class="tdtitle" style="width:162px;">
Judge Name:
</td>
<td>
<span id="SheetContentPlaceHolder_caseSummary_lblJudgeName" class="summaryTextBox">[JUDGE NAME]</span>
</td>
</tr>
试图执行几秒钟的睡眠,然后再执行以确保bs4汤对象已加载页面以获取所有内容。错误仍然存在 使用离线html代码在相同内容的其他版本上测试过的代码,其他情况,在线相同错误,数据恢复成功相同。这是相关的代码段:
data_sites = [8, 27, 12, 10]
data_list = []
for locations in data_sites:
case_data = summ_soup.find_all('td')[locations]
data_list.append(case_data.text)
预期结果,其中四个td标签的文本在data_sites列表中编号。即
data_list = ['<CASE NUMBER>', 'CASE OPEN', 'JUDGE NAME', '<statute content>'].
在下载的完整html页面上测试代码时,我得到了上述准确的结果。这样做是为了避免在设计代码时反复访问网站。在几种不同的情况下对此进行了测试,即文本内容位于模板中,并且始终显示在同一td标签上。
但是,当在线运行代码时,我一直收到此错误。
File "<path to my python file>", line 145, in get_summ_data
case_data = summ_soup.find_all('td')[locations]
IndexError: list index out of range
如果很重要,请使用Python 3.7和Pycharm。另外,在通过VPN连接的同时在线运行代码。