鱼C论坛

 找回密码
 立即注册
查看: 1897|回复: 1

遇到list index out of range的解决办法

[复制链接]
发表于 2021-9-23 14:44:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #-*- codeing=utf-8 -*-
  2. import re
  3. from bs4 import BeautifulSoup
  4. import urllib.request
  5. import region       #此库为地区编码(有芒市,昆明,保山)


  6. def main():
  7.     baseurl="http://www.weather.com.cn/"
  8.     datalist=getData(baseurl)
  9.     print(datalist)
  10.    

  11. #设置获取规则(规则相同的同一归为Allrule1和Allrule2)
  12. Allrule1=re.compile(r'<span>(.*)</span>')      
  13. Allrule2=re.compile(r'<em>(.*)</em>')
  14. findwindclassAct=Allrule2
  15. findtempAct=Allrule1
  16. findActtime=Allrule1
  17. findhumAct=Allrule2
  18. findwinddirAct=Allrule1

  19. findinqDay=re.compile(r'<p class="wea" title="(.*)">(.*)</p>')
  20. findtempDay=Allrule1
  21. findwinddirDay=re.compile(r'<span class title="(.*)">')
  22. findwindclassDay=re.compile(r'<(.*)</span>')
  23. findsunriTime=Allrule1

  24. findinqNight=re.compile(r'<p class="wea" title="(.*)">(.*)</p>')
  25. findtempNight=Allrule1
  26. findwinddirNight=re.compile(r'<span class title="(.*)">')
  27. findwindclassNight=re.compile(r'<(.*)</span>')
  28. sunsetTime=Allrule1



  29. #爬取网页
  30. def getData(baseurl):
  31.     regionnum=region.selectRegion()
  32.     url=baseurl+r"weather1d/"+regionnum+".shtml#around1"
  33.     html=askUrl(url)
  34.     #解析数据
  35.     soup=BeautifulSoup(html,"html.parser")
  36.     for item in soup.find_all('div',class_="t"):
  37.         data=[]
  38.         item=str(item)

  39.         
  40.         Acttime=re.findall(findActtime,item)[0]             #获取当前时间
  41.         data.append(Acttime)                                
  42.         tempAct=re.findall(findtempAct,item)[3]             #获取当前气温
  43.         data.append(tempAct)
  44.         humAct=re.findall(findhumAct,item)[0]               #获取当前湿度
  45.         data.append(humAct)
  46.         winddirAct=re.findall(findwinddirAct,item)[2]       #获取当前风向
  47.         data.append(winddirAct)
  48.         windclassAct=re.findall(findwindclassAct,item)[1]   #获取当前风力级别
  49.         data.append(windclassAct)                           

  50.         inqDay=re.findall(findinqDay,item)[0]               #获取白天天气种类
  51.         data.append(inqDay)
  52.         tempDay=re.findall(findtempDay,item)[5]             #获取白天气温
  53.         data.append(tempDay)
  54.         winddirDay=re.findall(findwinddirDay,item)[0]       #获取白天风向
  55.         data.append(winddirDay)
  56.         windclassDay=re.findall(findwindclassDay,item)[0]   #获取白天风力级别
  57.         data.append(windclassDay)
  58.         sunriTime=re.findall(findsunriTime,item)[6]         #获取日出时间
  59.         data.append(sunriTime)

  60.         inqNight=re.findall(findinqNight,item)[1]           #获取夜间天气种类
  61.         data.append(inqNight)
  62.         tempNight=re.findall(findtempNight,item)[7]         #获取夜间气温
  63.         data.append(tempNight)
  64.         winddirNight=re.findall(findwinddirNight,item)[1]   #获取夜间风向
  65.         data.append(winddirNight)
  66.         windclassNight=re.findall(findwindclassNight,item)[1] #获取夜间风力级别
  67.         data.append(windclassNight)
  68.         sunsetTime=re.findall(findsunsetTime,item)[8]       #获取日落时间
  69.         data.append(sunsetTime)

  70.         
  71.     return data


  72. """
  73. def printData():
  74.     data=getData(baseurl)
  75.     print(data)
  76. """   


  77. #获取网页
  78. def askUrl(url):
  79.     head={
  80.         "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
  81.     }
  82.     req=urllib.request.Request(url,headers=head)
  83.     html=""
  84.     try:
  85.         resp=urllib.request.urlopen(req)
  86.         html=resp.read().decode("utf-8")

  87.     except urllib.error.URLError as e:
  88.         if hasattr(e,"code"):
  89.             print(e.code)
  90.         if hasattr(e,"reason"):
  91.             print(e.reason)
  92.    
  93.     return html



  94. if __name__=="__main__":
  95.     main()
复制代码

------------------------------------
报错信息为:
Traceback (most recent call last):
  File "F:\python_file\spider_wether.py", line 115, in <module>
    main()
  File "F:\python_file\spider_wether.py", line 10, in main
    data=getData(baseurl)
  File "F:\python_file\spider_wether.py", line 63, in getData
    winddirDay=re.findall(findwinddirDay,item)[0]
IndexError: list index out of range
------------------------------------
求助求助求助求助
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-24 16:17:15 | 显示全部楼层
winddirDay=re.findall(findwinddirDay,item)[0] 这一行没有找到数据,所以报错了,查查re语法,一般都用非贪婪匹配的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-18 06:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表