鱼C论坛

 找回密码
 立即注册
查看: 2515|回复: 16

[已解决]极客Python爬起豆瓣出现list index out of range错误怎么办

[复制链接]
发表于 2021-2-3 17:03:37 | 显示全部楼层 |阅读模式

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

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

x
代码基本上照抄的小甲鱼的。最后运行出现list index out of range错误怎么解决啊
有没有大佬有现在可运行的完整代码发一下啊

  1. import requests
  2. import bs4
  3. import re

  4. def open_url(url):
  5.         headers={'user-agent':'Mozilla/5.0'}
  6.         res=requests.get(url,headers=headers)
  7.         return res

  8. def find_movies(res):
  9.     soup=bs4.BeautifulSoup(res.text,"html.parser")

  10.     movies=[]
  11.     targets=soup.find_all("div",class_="hd")
  12.     for each in targets:
  13.         movies.append(each.a.span.text)

  14.     ranks=[]
  15.     targets=soup.find_all("span",class_="rating_num")
  16.     for each in targets:
  17.         ranks.append(' 评分:%s ' % each.text)

  18.     messages=[]
  19.     targets=soup.find_all("div",class_="bd")
  20.     for each in targets:
  21.         try:
  22.             messages.append(each.p.text.split("\n")[1],strip()+each.p.text.split("\n")[2].strip())
  23.         except:
  24.             continue

  25.     result=[]
  26.     length=len(movies)
  27.     for i in range(length):
  28.         result.append(movies[i]+ranks[i]+messages[i]+"\n")

  29.     return result

  30. def find_depth(res):
  31.     soup=bs4.BeautifulSoup(res.text,"html.parser")
  32.     depth=soup.find("span",class_="next").previous_sibling.previous_sibling.text

  33.     return int(depth)

  34. def main():
  35.     host="https://movie.douban.com/top250"
  36.     res=open_url(host)
  37.     depth=find_depth(res)

  38.     result=[]
  39.     for i in range(depth):
  40.         url=host+"/?start=" + str(25 * i)
  41.         res=open_url(url)
  42.         result.extend(find_movies(res))

  43.     with open("豆瓣TOP250电影.txt","w",encoding="utf-8") as f:
  44.         for each in result:
  45.             f.write(each)

  46. if __name__=="__main__":
  47.     main()
复制代码

最佳答案
2021-2-3 18:38:24
代码第27句。写错了。
这一句。messages.append(each.p.text.split("\n")[1]后面是'.strip()',写成了逗号
  1. messages.append(each.p.text.split("\n")[1],strip()+each.p.text.split("\n")[2].strip())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-3 17:26:47 | 显示全部楼层
  1. headers={'user-agent':'Mozilla/5.0'}
复制代码

这个写错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-2-3 18:38:24 | 显示全部楼层    本楼为最佳答案   
代码第27句。写错了。
这一句。messages.append(each.p.text.split("\n")[1]后面是'.strip()',写成了逗号
  1. messages.append(each.p.text.split("\n")[1],strip()+each.p.text.split("\n")[2].strip())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-3 19:14:48 | 显示全部楼层

好的 已修改,但运行没反应
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 19:15:18 | 显示全部楼层
YunGuo 发表于 2021-2-3 18:38
代码第27句。写错了。
这一句。messages.append(each.p.text.split("\n")[1]后面是'.strip()',写成了逗号 ...

感谢,已修改,但运行没反应
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-3 19:16:15 | 显示全部楼层
报错信息贴出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 19:19:31 | 显示全部楼层
修改后的代码
原先有部分手打的出错了
现在应该跟小甲鱼的一样了
但运行是没反应。。。。
  1. import requests
  2. import bs4
  3. import re

  4. def open_url(url):
  5.         headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}
  6.         res=requests.get(url,headers=headers)
  7.         return res

  8. def find_movies(res):
  9.     soup=bs4.BeautifulSoup(res.text,"html.parser")

  10.     movies=[]
  11.     targets=soup.find_all("div",class_="hd")
  12.     for each in targets:
  13.         movies.append(each.a.span.text)

  14.     ranks=[]
  15.     targets=soup.find_all("span",class_="rating_num")
  16.     for each in targets:
  17.         ranks.append(' 评分:%s ' % each.text)

  18.     messages=[]
  19.     targets=soup.find_all("div",class_="bd")
  20.     for each in targets:
  21.         try:
  22.             messages.append(each.p.text.split("\n")[1].strip()+each.p.text.split("\n")[2].strip())
  23.         except:
  24.             continue

  25.     result=[]
  26.     length=len(movies)
  27.     for i in range(length):
  28.         result.append(movies[i]+ranks[i]+messages[i]+"\n")
  29.     return result

  30. def find_depth(res):
  31.     soup=bs4.BeautifulSoup(res.text,"html.parser")
  32.     depth=soup.find("span",class_="next").previous_sibling.previous_sibling.text

  33.     return int(depth)

  34. def main():
  35.     host="https://movie.douban.com/top250"
  36.     res=open_url(host)
  37.     depth=find_depth(res)

  38.     result=[]
  39.     for i in range(depth):
  40.         url=host+"/?start=" + str(25 * i)
  41.         res=open_url(url)
  42.         result.extend(find_movies(res))

  43.     with open("豆瓣TOP250电影.txt","w",encoding="utf-8") as f:
  44.         for each in result:
  45.             f.write(each)

  46. if __name__=="__main__":
  47.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 19:20:13 | 显示全部楼层

不报错  就是没反应了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-3 19:22:13 | 显示全部楼层
没反应要么就是没有爬到东西,要么就是你没看到那个生成的文件

你挨个 print 一下,找找问题呗

能 print 的都 print 一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 19:23:17 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-3 19:22
没反应要么就是没有爬到东西,要么就是你没看到那个生成的文件

你挨个 print 一下,找找问题呗

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 19:59:46 | 显示全部楼层
爬虫成功了 感谢大家
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-20 09:55:23 | 显示全部楼层
DSSIMP 发表于 2021-2-3 19:59
爬虫成功了 感谢大家

能不能分享下完全体的代码呀  小白路过 还在基础语法趴着 好难
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-20 14:04:38 | 显示全部楼层
手里尖刀刺 发表于 2021-8-20 09:55
能不能分享下完全体的代码呀  小白路过 还在基础语法趴着 好难

import requests
import bs4
import re

def open_url(url):
        headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}
        res=requests.get(url,headers=headers)
        return res

def find_movies(res):
    soup=bs4.BeautifulSoup(res.text,"html.parser")

    movies=[]
    targets=soup.find_all("div",class_="hd")
    for each in targets:
        movies.append(each.a.span.text)

    ranks=[]
    targets=soup.find_all("span",class_="rating_num")
    for each in targets:
        ranks.append(' 评分:%s ' % each.text)

    messages=[]
    targets=soup.find_all("div",class_="bd")
    for each in targets:
        try:
            messages.append(each.p.text.split("\n")[1].strip()+each.p.text.split("\n")[2].strip())
        except:
            continue

    n=len(messages)
    for i in range(n):
        messages[i]=messages[i].replace("\xa0"," ")

    result=[]
    length=len(movies)
    for i in range(length):
        result.append(movies[i]+ranks[i]+messages[i].replace("\xa0"," ")+"\n")
    return result

def find_depth(res):
    soup=bs4.BeautifulSoup(res.text,"html.parser")
    depth=soup.find("span",class_="next").previous_sibling.previous_sibling.text

    return int(depth)

def main():
    host="https://movie.douban.com/top250"
    res=open_url(host)
    depth=find_depth(res)

    result=[]
    for i in range(depth):
        url=host+"/?start=" + str(25 * i)
        res=open_url(url)
        result.extend(find_movies(res))

    with open("豆瓣TOP250电影.txt","w",encoding="utf-8") as f:
        for each in result:
            f.write(each)

if __name__=="__main__":
    main()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-20 14:05:44 | 显示全部楼层
DSSIMP 发表于 2021-8-20 14:04
import requests
import bs4
import re
  1. import requests
  2. import bs4
  3. import re

  4. def open_url(url):
  5.         headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}
  6.         res=requests.get(url,headers=headers)
  7.         return res

  8. def find_movies(res):
  9.     soup=bs4.BeautifulSoup(res.text,"html.parser")

  10.     movies=[]
  11.     targets=soup.find_all("div",class_="hd")
  12.     for each in targets:
  13.         movies.append(each.a.span.text)

  14.     ranks=[]
  15.     targets=soup.find_all("span",class_="rating_num")
  16.     for each in targets:
  17.         ranks.append(' 评分:%s ' % each.text)

  18.     messages=[]
  19.     targets=soup.find_all("div",class_="bd")
  20.     for each in targets:
  21.         try:
  22.             messages.append(each.p.text.split("\n")[1].strip()+each.p.text.split("\n")[2].strip())
  23.         except:
  24.             continue

  25.     n=len(messages)
  26.     for i in range(n):
  27.         messages[i]=messages[i].replace("\xa0"," ")

  28.     result=[]
  29.     length=len(movies)
  30.     for i in range(length):
  31.         result.append(movies[i]+ranks[i]+messages[i].replace("\xa0"," ")+"\n")
  32.     return result

  33. def find_depth(res):
  34.     soup=bs4.BeautifulSoup(res.text,"html.parser")
  35.     depth=soup.find("span",class_="next").previous_sibling.previous_sibling.text

  36.     return int(depth)

  37. def main():
  38.     host="https://movie.douban.com/top250"
  39.     res=open_url(host)
  40.     depth=find_depth(res)

  41.     result=[]
  42.     for i in range(depth):
  43.         url=host+"/?start=" + str(25 * i)
  44.         res=open_url(url)
  45.         result.extend(find_movies(res))

  46.     with open("豆瓣TOP250电影.txt","w",encoding="utf-8") as f:
  47.         for each in result:
  48.             f.write(each)

  49. if __name__=="__main__":
  50.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-20 14:07:22 | 显示全部楼层
手里尖刀刺 发表于 2021-8-20 09:55
能不能分享下完全体的代码呀  小白路过 还在基础语法趴着 好难
  1. import requests
  2. import bs4
  3. import re

  4. def open_url(url):
  5.         headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}
  6.         res=requests.get(url,headers=headers)
  7.         return res

  8. def find_movies(res):
  9.     soup=bs4.BeautifulSoup(res.text,"html.parser")

  10.     movies=[]
  11.     targets=soup.find_all("div",class_="hd")
  12.     for each in targets:
  13.         movies.append(each.a.span.text)

  14.     ranks=[]
  15.     targets=soup.find_all("span",class_="rating_num")
  16.     for each in targets:
  17.         ranks.append(' 评分:%s ' % each.text)

  18.     messages=[]
  19.     targets=soup.find_all("div",class_="bd")
  20.     for each in targets:
  21.         try:
  22.             messages.append(each.p.text.split("\n")[1].strip()+each.p.text.split("\n")[2].strip())
  23.         except:
  24.             continue

  25.     n=len(messages)
  26.     for i in range(n):
  27.         messages[i]=messages[i].replace("\xa0"," ")

  28.     result=[]
  29.     length=len(movies)
  30.     for i in range(length):
  31.         result.append(movies[i]+ranks[i]+messages[i].replace("\xa0"," ")+"\n")
  32.     return result

  33. def find_depth(res):
  34.     soup=bs4.BeautifulSoup(res.text,"html.parser")
  35.     depth=soup.find("span",class_="next").previous_sibling.previous_sibling.text

  36.     return int(depth)

  37. def main():
  38.     host="https://movie.douban.com/top250"
  39.     res=open_url(host)
  40.     depth=find_depth(res)

  41.     result=[]
  42.     for i in range(depth):
  43.         url=host+"/?start=" + str(25 * i)
  44.         res=open_url(url)
  45.         result.extend(find_movies(res))

  46.     with open("豆瓣TOP250电影.txt","w",encoding="utf-8") as f:
  47.         for each in result:
  48.             f.write(each)

  49. if __name__=="__main__":
  50.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-20 16:14:07 | 显示全部楼层
C:\Users\gt20180105\Desktop这是什么情况啊 请求无效
1629447177(1).jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-2 16:38:55 | 显示全部楼层
手里尖刀刺 发表于 2021-8-20 16:14
这是什么情况啊 请求无效

你没有下载预先下载好requests,先用pip指令下载
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 17:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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