请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

报IndexError: list index out of range错误

代码:

topic_url = parse.urljoin(domain, tr.xpath(".//td[3]/a/@href").extract()[-1])
topic_title = tr.xpath(".//td[3]/a/text()").extract()[-1]

报错:

/Users/shihaotian/Desktop/venv/lib/python3.7/site-packages/pymysql/cursors.py:170: Warning: (1364, "Field 'author_id' doesn't have a default value")
  result = self._query(query)
Traceback (most recent call last):
  File "/Users/shihaotian/PycharmProjects/untitled/spider.py", line 126, in <module>
    parse_list(url)
  File "/Users/shihaotian/PycharmProjects/untitled/spider.py", line 81, in parse_list
    topic_url = parse.urljoin(domain, tr.xpath(".//td[3]/a/@href").extract()[-1])
IndexError: list index out of range

上面取[-1]是因为csdn在第一二条中新增了推荐a标签,所以取最后一个能正常取得数据

正在回答 回答被采纳积分+3

1回答

bobby 2020-07-13 18:33:29

这个地方是tr.xpath(".//td[3]/a/text()")这个没有获取到数据,你用try except处理一下就行了

0 回复 有任何疑惑可以回复我~
  • 提问者 慕沐9123820 #1
    说是空的,没有取到数据,但是这个地方确实是取到数据啦,调试的时候正常显示,运行的时候报错,但是数据库内已经有完整的数据写入
    回复 有任何疑惑可以回复我~ 2020-07-13 18:39:08
  • bobby 回复 提问者 慕沐9123820 #2
    这个报错是必然出现的 还是某些情况下的某些url才会出现这个问题?
    回复 有任何疑惑可以回复我~ 2020-07-14 12:58:01
  • 提问者 慕沐9123820 回复 bobby #3
    比如if tr.xpath(".//td[1]/span/text()").extract():
                status = tr.xpath(".//td[1]/span/text()").extract()[0]
                topic.status = status
    这段代码,如果这样写的话就没有这个错误,如果topic_title = tr.xpath(".//td[3]/a/text()").extract()[-1] 这样直接对xpath进行分割必然出错,直接复制https://git.imooc.com/coding-325/resources/src/master/spider/csdn_spider/spider.py您的代码进去也会直接报错,虽然报错了,但是功能都实现了,我都无语了,没解决了这个问题我都无法进行下一步的学习,真是醉了
    回复 有任何疑惑可以回复我~ 2020-07-17 13:49:45
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信