鱼C论坛

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

python top250豆瓣图书 indexerror

[复制链接]
发表于 2021-12-28 10:22:48 | 显示全部楼层 |阅读模式

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

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

x
  1. <div class="blockcode"><blockquote># coding=utf-8
  2. #   @Time : 2021/12/26 15点41分
  3. #   @Author :
  4. #   @File   :
  5. #   @Software:PyCharm

  6. import re  # 正则表达式,进行文字匹配
  7. import urllib.error  # 制定url,获取网页数据
  8. import urllib.request

  9. import xlwt  # 进行excel操作
  10. from bs4 import BeautifulSoup  # 网页解析,获取数据

  11. def main():
  12.     baseurl = "https://book.douban.com/top250?start="
  13.     #1爬取网页
  14.     datalist = getData(baseurl)
  15.     savepath = "豆瓣图书top250战毅.xls"

  16.     #3.保存数据
  17.     saveData(datalist, savepath)
  18.     #askURL('https://book.douban.com/top250?start=')


  19. findlink = re.compile(r'<a href="(.*?)" onclick=""moreurl')     #生成创建正则表达式的规则(字符串模式)
  20. findImgSrc = re.compile(r'<img src="(.*?)"', re.S)
  21. findCTitle = re.compile(r'"" title="(.*)">')
  22. #findFTitle = re.compile(r'<span style="font-size:12px;">(.*)</span>', re.S)

  23. findRating = re.compile(r'<span class="rating_nums">(.*)</span>')
  24. findJudge = re.compile(r'<span class="pl">((\d)人评价)</span>')
  25. findInq = re.compile(r'<span class="inq">(.*)</span>', re.S)
  26. findBd = re.compile(r'<p class="pl">(.*)</p>', re.S)


  27. #爬取网页
  28. def getData(baseurl):
  29.     datalist = []
  30.     for i in  range(0, 10): #调用页面信息的函数,10次
  31.         url = baseurl + str(i*25)
  32.         html = askURL(url)      #保存获取到的源码
  33.         # 2.逐一解析数据
  34.         soup = BeautifulSoup(html, "html.parser")
  35.         for item in soup.find_all('tr', class_="item"):
  36.          #print(item)  #测试:查看全部信息
  37.             data = []   #保存一本书全部信息
  38.             item = str(item)


  39.             #影片详情链接
  40.             #link = re.findall(findlink, item)[0] #re库来通过正则表达式找到指定的字符串
  41.             #print(link)
  42.         link = re.findall(findlink, item)#[0]
  43.         data.append(link)
  44.         imgSrc = re.findall(findImgSrc, item)[0]
  45.         data.append(imgSrc)
  46.         titles = re.findall(findCTitle, item)[0]
  47.         if (len(titles) == 2):
  48.             ctitle = titles[0]
  49.             data.append(ctitle)
  50.             Ftitle = titles[1].replace("/", "")
  51.             data.append(Ftitle)
  52.         else:
  53.             data.append(titles[0])
  54.             data.append('')
  55.         rating = re.findall(findRating, item)[0]
  56.         data.append(rating)

  57.         judgeM = re.findall(findJudge, item)#[0]
  58.         data.append(judgeM)

  59.         inq = re.findall(findInq, item)
  60.         if (len(inq) != 0):
  61.             inq = inq[0].replace("。", "")
  62.             data.append(inq)
  63.         else:
  64.             data.append("")
  65.         bd = re.findall(findBd, item)[0]
  66.         bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd)
  67.         bd = re.sub('/', " ", bd)
  68.         data.append(bd.strip())

  69.         datalist.append(data)
  70.     print(datalist)



  71.     return datalist


  72. #得到指定的一个url的网页内容
  73. def askURL(url):    #模拟浏览器头部信息
  74.     head = {"User-Agent": 'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
  75.     }   #用户代理我们是什么类型的浏览器(本质上我们能根据啥水准的内容)
  76.     request = urllib.request.Request(url, headers=head)
  77.     html = ''
  78.     try:
  79.         response = urllib.request.urlopen(request)
  80.         html = response.read().decode("utf-8")
  81.         #print(html)

  82.     except urllib.error.URLError as e:
  83.         if hasattr(e, "code"):
  84.             print(e.code)
  85.         if hasattr(e, "reason"):
  86.             print(e.reason)
  87.     return html



  88. def saveData(datalist, savepath):
  89.     print('save....')
  90.     book = xlwt.Workbook(encoding="utf-8", style_compression=0)
  91.     sheet = book.add_sheet('豆瓣图书top250', cell_overwrite_ok=True)
  92.     col = ("图书详情链接", "图片详情链接", "中文书名", "外国书名", "评分", "评价数", "概况", "相关信息")
  93.     for i in range(0, 8):
  94.         sheet.write(0, i, col[i])   #列名
  95.     for i in range (0, 250):
  96.         print("第%d条" % (i+1))
  97.         data = datalist[i]
  98.         for j in range(0, 8):
  99.             sheet.write(i+1, j, data[j])            #数据

  100.     book.save(savepath)         #保存

  101. if __name__ == "__main__":
  102.     main()
  103.     print('爬取完毕')
复制代码



请问大佬们这个是什么原因
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-28 10:23:32 | 显示全部楼层
  1. C:\Users\虫宝\AppData\Local\Programs\Python\Python37\python.exe E:/Users/虫宝/untitled13/test6.py
  2. [[['https://book.douban.com/subject/24531956/'], 'https://img9.doubanio.com/view/subject/s/public/s29101586.jpg', '哈', '', '9.7', [], '从9&#190;站台开始的旅程', 'J.K.罗琳 (J.K.Rowling)   苏农   人民文学出版社   2008-12-1   498.00元< p>\n<div class="star clearfix">\n<span class="allstar50">< span>\n<span class="rating_nums">9.7< span>\n<span class="pl">(\n                    61057人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">从9&#190;站台开始的旅程< span>'], [['https://book.douban.com/subject/1027191/'], 'https://img9.doubanio.com/view/subject/s/public/s1768916.jpg', '历', '', '9.0', [], '窥见美国社会的一扇窗', '林达   生活·读书·新知三联书店   1997-5   19.00元< p>\n<div class="star clearfix">\n<span class="allstar45">< span>\n<span class="rating_nums">9.0< span>\n<span class="pl">(\n                    40895人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">窥见美国社会的一扇窗< span>'], [['https://book.douban.com/subject/3162991/'], 'https://img2.doubanio.com/view/subject/s/public/s3219163.jpg', '艺', '', '9.6', [], '从最早的洞窟绘画到当今的实验艺术', '[英] 贡布里希 (Sir E.H.Gombrich)   范景中   广西美术出版社   2008-04   280.00< p>\n<div class="star clearfix">\n<span class="allstar50">< span>\n<span class="rating_nums">9.6< span>\n<span class="pl">(\n                    20397人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">从最早的洞窟绘画到当今的实验艺术< span>'], [['https://book.douban.com/subject/4238362/'], 'https://img1.doubanio.com/view/subject/s/public/s4243447.jpg', '送', '', '8.6', [], '在这本书里,被“审视”的东西杂七杂八', '刘瑜   上海三联书店   2010-1   25.00元< p>\n<div class="star clearfix">\n<span class="allstar45">< span>\n<span class="rating_nums">8.6< span>\n<span class="pl">(\n                    135348人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">在这本书里,被“审视”的东西杂七杂八< span>'], [['https://book.douban.com/subject/3026879/'], 'https://img9.doubanio.com/view/subject/s/public/s2990934.jpg', '爱', '', '8.8', [], '谦恭地、勇敢地、真诚地和有纪律地爱他人', '[美] 艾·弗洛姆   李健鸣   上海译文出版社   2008-4   15.00元< p>\n<div class="star clearfix">\n<span class="allstar45">< span>\n<span class="rating_nums">8.8< span>\n<span class="pl">(\n                    37817人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">谦恭地、勇敢地、真诚地和有纪律地爱他人< span>'], [['https://book.douban.com/subject/1020961/'], 'https://img1.doubanio.com/view/subject/s/public/s26237958.jpg', '棋', '王', '8.8', [], '我从未真正见过火,也未见过毁灭,更不知新生', '阿城   作家出版社   1999-10   13.00< p>\n<div class="star clearfix">\n<span class="allstar45">< span>\n<span class="rating_nums">8.8< span>\n<span class="pl">(\n                    29311人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">我从未真正见过火,也未见过毁灭,更不知新生< span>'], [['https://book.douban.com/subject/1013416/'], 'https://img1.doubanio.com/view/subject/s/public/s23579217.jpg', '雷', '雨', '8.6', [], '一幕人生大悲剧,在一个雷雨夜爆发', '曹禺   人民文学出版社   1999-05   9.20< p>\n<div class="star clearfix">\n<span class="allstar45">< span>\n<span class="rating_nums">8.6< span>\n<span class="pl">(\n                    69660人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">一幕人生大悲剧,在一个雷雨夜爆发< span>'], [['https://book.douban.com/subject/1083762/'], 'https://img9.doubanio.com/view/subject/s/public/s1134166.jpg', '人', '', '8.7', [], '十四个影响人类文明的瞬间', '[奥] 斯蒂芬·茨威格   舒昌善   广西师范大学出版社   2004-8   18.00元< p>\n<div class="star clearfix">\n<span class="allstar45">< span>\n<span class="rating_nums">8.7< span>\n<span class="pl">(\n                    27005人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">十四个影响人类文明的瞬间< span>'], [['https://book.douban.com/subject/3012517/'], 'https://img1.doubanio.com/view/subject/s/public/s4045138.jpg', '小', '', '8.6', [], '两个女人的史诗', '严歌苓   作家出版社   2008-4   28.00元< p>\n<div class="star clearfix">\n<span class="allstar45">< span>\n<span class="rating_nums">8.6< span>\n<span class="pl">(\n                    30331人评价\n                )< span>\n< div>\n<p class="quote" style="margin: 10px 0; color: #666">\n<span class="inq">两个女人的史诗< span>'], [['https://book.douban.com/subject/10555486/'], 'https://img2.doubanio.com/view/subject/s/public/s8972073.jpg', '分', '', '8.7', [], '', '[意] 伊塔洛·卡尔维诺   吴正仪   译林出版社   2012-4-1   20.00元']]
  3. save....
  4. Traceback (most recent call last):
  5.   File "E:/Users/虫宝/untitled13/test6.py", line 127, in <module>
  6.     main()
  7.   File "E:/Users/虫宝/untitled13/test6.py", line 21, in main
  8.     saveData(datalist, savepath)
  9.   File "E:/Users/虫宝/untitled13/test6.py", line 120, in saveData
  10.     data = datalist[i]
  11. IndexError: list index out of range
  12. 第1条
  13. 第2条
  14. 第3条
  15. 第4条
  16. 第5条
  17. 第6条
  18. 第7条
  19. 第8条
  20. 第9条
  21. 第10条
  22. 第11条

  23. 进程已结束,退出代码1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 14:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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