鱼C论坛

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

爬虫写入xls时报错

[复制链接]
发表于 2022-4-17 20:54:40 | 显示全部楼层 |阅读模式

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

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

x
import re
from bs4 import BeautifulSoup
import urllib.request
import xlwt
url = 'https://movie.douban.com/top250?start='
findlink = re.compile(r'<a href="(.*?)">')#电影链接
findimg = re.compile(r'<img .* src="(.*?)"/>',re.S)#图片链接
findname = re.compile(r'span class="title">(.*?)</span>')#电影名
findpeople = re.compile(r'<span>(\d*)人评价</span>')#评价人数
findpoint = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')#评分
findother = re.compile(r'<p class="">(.*?)</p>',re.S) #获取导演等信息
findothers = re.compile(r'<span class="inq">(.*?)</span>') #获取其他信息
def main():
    #解析网页源码
    datas = Gteurl(url)
    #保存数据
    Savedata(datas)
def Gteurl(url):
    for i in range(0,10):
        html = url + str(i*25)
        response = askURL(html)
        bs = BeautifulSoup(response,'html.parser')
        for item in bs.find_all('div',class_ = 'item'):
            data = []
            item = str(item)
            #1
            name = re.findall(findname, item)
            if len(name) == 2:
                cname = name[0]
                data.append(cname)
                oname = name[1].replace("\xa0/\xa0"," ")
                data.append(oname)
            else:
                data.append(name[0])
                data.append(' ')


            #2
            link = re.findall(findlink,item)[0]
            data.append(link)
            #7
            Img = re.findall(findimg,item)[0]
            Img = re.sub(r'width="100','',Img)
            Img = re.sub(r'"', '', Img)

            data.append(Img)
            #3
            nums = re.findall(findpeople,item)[0]
            data.append(nums)
            #6
            point = re.findall(findpoint,item)[0]

            data.append(point)
            #4
            other = re.findall(findother,item)[0]
            new_other = re.sub('<br/>(\s+)?',' ',other)
            new_other = re.sub("\n",'',new_other)
            new_other = re.sub("\xa0", ' ', new_other)


            data.append(new_other)
            #5
            others = re.findall(findothers,item)
            if len(others) !=0:
                data.append(others[0])
            else:
                data.append(' ')



    return data


def askURL(url): #封装数据,得到网页源码
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.39'
    }
    req =urllib.request.Request(url = url,headers=head,)#封装的信息,构建请求对象
    response = urllib.request.urlopen(req)#发出请求
    return response
def Savedata(data):
    col = ('电影中文名','电影外国名','电影链接','图片链接','评价人数','评分','导演等信息','其他信息')
    workbook = xlwt.Workbook(encoding='utf-8')
    worksheet = workbook.add_sheet('sheet1')
    for a in range(8):
        worksheet.write(0,a,col[a])
    for i in range(0,250):
        Data = data[i]
        for j in (0,8):
            worksheet.write(i+1,j,Data[j])#此处报错,string index out of range
    worksheet.save('豆瓣250.xls')
if __name__ == '__main__':
    main()
    print('爬取完毕!')
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-18 18:43:26 | 显示全部楼层
  1. import re
  2. from bs4 import BeautifulSoup
  3. import urllib.request
  4. import xlwt
  5. url = 'https://movie.douban.com/top250?start='
  6. findlink = re.compile(r'<a href="(.*?)">')#电影链接
  7. findimg = re.compile(r'<img .* src="(.*?)"/>',re.S)#图片链接
  8. findname = re.compile(r'span class="title">(.*?)</span>')#电影名
  9. findpeople = re.compile(r'<span>(\d*)人评价</span>')#评价人数
  10. findpoint = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')#评分
  11. findother = re.compile(r'<p class="">(.*?)</p>',re.S) #获取导演等信息
  12. findothers = re.compile(r'<span class="inq">(.*?)</span>') #获取其他信息
  13. def main():
  14.     #解析网页源码
  15.     datas = Gteurl(url)
  16.     #保存数据
  17.     Savedata(datas)
  18. def Gteurl(url):
  19.     datas = []                               # 加了这行
  20.     for i in range(0,10):
  21.         html = url + str(i*25)
  22.         response = askURL(html)
  23.         bs = BeautifulSoup(response,'html.parser')
  24.         for item in bs.find_all('div',class_ = 'item'):
  25.             data = []
  26.             item = str(item)
  27.             #1
  28.             name = re.findall(findname, item)
  29.             if len(name) == 2:
  30.                 cname = name[0]
  31.                 data.append(cname)
  32.                 oname = name[1].replace("\xa0/\xa0"," ")
  33.                 data.append(oname)
  34.             else:
  35.                 data.append(name[0])
  36.                 data.append(' ')


  37.             #2
  38.             link = re.findall(findlink,item)[0]
  39.             data.append(link)
  40.             #7
  41.             Img = re.findall(findimg,item)[0]
  42.             Img = re.sub(r'width="100','',Img)
  43.             Img = re.sub(r'"', '', Img)

  44.             data.append(Img)
  45.             #3
  46.             nums = re.findall(findpeople,item)[0]
  47.             data.append(nums)
  48.             #6
  49.             point = re.findall(findpoint,item)[0]

  50.             data.append(point)
  51.             #4
  52.             other = re.findall(findother,item)[0]
  53.             new_other = re.sub('<br/>(\s+)?',' ',other)
  54.             new_other = re.sub("\n",'',new_other)
  55.             new_other = re.sub("\xa0", ' ', new_other)


  56.             data.append(new_other)
  57.             #5
  58.             others = re.findall(findothers,item)
  59.             if len(others) !=0:
  60.                 data.append(others[0])
  61.             else:
  62.                 data.append(' ')


  63.             datas.append(data)                     # 加了这行
  64.     return datas                                   # 改了这行


  65. def askURL(url): #封装数据,得到网页源码
  66.     head = {
  67.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.39'
  68.     }
  69.     req =urllib.request.Request(url = url,headers=head,)#封装的信息,构建请求对象
  70.     response = urllib.request.urlopen(req)#发出请求
  71.     return response
  72. def Savedata(data):
  73.     col = ('电影中文名','电影外国名','电影链接','图片链接','评价人数','评分','导演等信息','其他信息')
  74.     workbook = xlwt.Workbook(encoding='utf-8')
  75.     worksheet = workbook.add_sheet('sheet1')
  76.     for a in range(8):
  77.         worksheet.write(0,a,col[a])
  78.     for i, _ in enumerate(data):                      # 改了这行
  79.         Data = data[i]
  80.         for j, v in enumerate(Data):                  # 改了这行
  81.             worksheet.write(i+1,j,v)                  # 改了这行
  82.     workbook.save('豆瓣250.xls')                     # 改了这行
  83. if __name__ == '__main__':
  84.     main()
  85.     print('爬取完毕!')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 04:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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