鱼C论坛

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

爬虫 list index out of range 求助

[复制链接]
发表于 2020-11-16 09:04:10 | 显示全部楼层 |阅读模式

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

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

x
有没有大佬可以帮我检查一下... 应该是小问题... 但是我已经看了好几个小时了呜呜

#-*- coding = utf-8 -*-

from bs4 import BeautifulSoup # 网页解析,获取数据
import re #正则表达式,进行文字匹配
import urllib.request,urllib.error #制定URL,获取网页数据
import xlwt #进行excel操作
import sqlite3 #进行SQLite数据库操作


def main():
    baseurl = 'https://book.douban.com/top250?start=0'
    #1.爬取网页
    datalist = getData(baseurl)
    savepath = '.\\豆瓣图书Top250.xls' #保存在当前位置
    #3.保存数据
    saveData(datalist,savepath)
   
    #askURL("https://movie.douban.com/top250?start=")
   
#找到图书的相关内容
findDs = re.compile(r'<span class="inq">(.*?)</span></p>',re.S)

def getData(baseurl):
    datalist = []
    URL = baseurl
    html = askURL(URL)        #保存获取到的网页源码
        #2.逐一解析数据
    soup = BeautifulSoup(html,"html.parser")
    for item in soup.find_all('p',class_='quote'):      
        #查找符合要求的字符串,形成列表
        
        data = []
        item = str(item)
            
        describe = re.findall(findDs, item)[0]
        data.append(describe)        #添加描述到data
            
    print(datalist)   
    return datalist   

#得到指定一个URL的网页内容
def askURL(URL):
    head = {"User-Agent":" Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"}
    #模拟浏览器头部信息,向豆瓣服务器发送消息
    #用户代理表示告诉豆瓣服务器我们是什么类型的机器、浏览器
    #(本质上是告诉浏览器我们可以接受什么水平的文件内容)
    request = urllib.request.Request(URL,headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
        #print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
   
    return html         


     

#保存数据   
def saveData(datalist,savepath):
    print('save...')
   
    book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建workbook对象
    sheet = book.add_sheet('图书Top250',cell_overwrite_ok=(True))#创建工作表
    sheet.write(0,0,'描述')#列名
    for i in range(0,25):
        print(i)
        #print("第%d条"%i)
        data = datalist[i]
        for j in range(0,1):
            sheet.write(i+1,j,data[j])
        
        

    book.save('图书描述.xls')#保存
   
   
   

if __name__ == '__main__':#u当程序执行时
    #调用函数
    main()           
            
我在爬取豆瓣图书top排行版的第一页的数据:https://book.douban.com/top250

Snipaste_2020-11-16_00-57-25.png
Snipaste_2020-11-16_00-57-42.png

运行总是在保存数据的 data = datalist[i]报错 out of range...

不知道有没有人可以帮帮呜呜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-16 09:36:10 | 显示全部楼层
我已经解决了,,,,,,,, 服了 暴风雨哭泣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 18:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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