wu~~ 2022-11-19 19:13 采纳率: 55.6%
浏览 26
已结题

爬虫时显示报错:IndexError: list index out of range

ulist.append([tds[0].text,tds[1].text,tds[2].text,tds[3].text,tds[4].text,tds[5].text,tds[6].text,tds[7].text])

IndexError: list index out of range

尝试打印了ulit显示的是0

用代码块功能插入代码,请勿粘贴截图
def getHTMLText(url):#爬取网站数据
    try:
        r = requests.get(url, timeout = 30,verify=False)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return '爬取失败'

def fillUnivlist(ulist,html):#解析网站数据
    soup = BeautifulSoup(html,"html.parser") 
    for tr in soup.find('body').children:
        if isinstance(tr,bs4.element.Tag):
            tds = tr('td')
            print(len(tds))
            ulist.append([tds[0].text,tds[1].text,tds[2].text,tds[3].text,tds[4].text,tds[5].text,tds[6].text,tds[7].text])

def writeUlistfile(ulist,dataname):#将网站存入csv文件
    with open(dataname,'w',encoding = 'utf-8',newline='') as fout:
        writer = csv.writer(fout)
        for row in ulist:
            writer.writerow(row)

uinfo1 =[]
url1 = 'https://www.chyxx.com/industry/202105/953391.html'
html1 = getHTMLText(url1)
fillUnivlist(uinfo1,html1)
writeUlistfile(uinfo1,'各种油产量初.csv')
运行结果及报错内容

img

我的解答思路和尝试过的方法

试着打印了一下,结果显示为0,减少了tds还是不行。
是爬取方式出错了吗?

我想要达到的结果

可以爬到数据

  • 写回答

2条回答 默认 最新

  • GaspardR 2022-11-19 21:20
    关注

    这一行:for tr in soup.find('body').children: 中的 'body' 改为 'tbody'.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月28日
  • 已采纳回答 11月20日
  • 创建了问题 11月19日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 如何将下列的“无限压缩存储器”设计出来
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口