2025年3月23日 星期日 甲辰(龙)年 月廿二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python3爬虫获取豆瓣电影网TOP250电影信息(EXCEL)

时间:02-22来源:作者:点击数:37

前面写过一篇文章python3爬虫获取豆瓣电影网TOP250电影信息是将爬取的结果写入txt文本文件的,这次是同样的示例,同样的方法,只是将结果写入到excel中并保存。

1.本次爬虫的思路

  • 读取url:https://movie.douban.com/top250?start=%d&filter=
  • 通过request拿到url中的内容部分
  • 通过xpath定位,获取我们想要的信息,比如:序列、电影名称、评星、评论人数、上映国家、上映时间、简述等
  • 通过openpyxl库将获取的信息写入xlsx文件中

2.使用的知识点

本次爬虫主要使用requests、lxml和openpyxl库

3.可以直接运行的代码

  • #!/usr/bin/env python
  • # _*_ coding:utf-8 _*_
  • # @File : doubanmovie.py
  • # @Author: tanglong
  • # @Date : 2020/6/12
  • # @Desc : PyCharm
  • import requests
  • from lxml import html
  • import openpyxl
  • #被爬取网站的消息头
  • headers = {
  • 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
  • }
  • # 爬取页面内容
  • def moviesInfo(url):
  • #根据url和headers获取网站全部内容
  • reponse = requests.get(url=url, headers=headers).content
  • #通过html模块解析上面获取的内容
  • bs = html.fromstring(reponse)
  • num = 0
  • # print("+++++++++++++++++++++", bs.xpath('//div[@class ="info"]'))
  • #通过xpath获取"div[@class ="info"]"的所有节点,即豆瓣的所有电影信息,每一个电影信息为一个"div[@class ="info"]",因此这里循环获取具体信息
  • for i in bs.xpath('//div[@class ="info"]'):
  • try:
  • #因为这个序列是在"div[@class ="info"]"外面(即bs里面),所以这边是用的bs.xpath,而不是i.xpath
  • movieNo = bs.xpath('//*[@id="content"]/div/div[1]/ol/li[{}]/div/div[1]/em/text()'.format(num+1))[0]
  • # movieNo = bs.xpath('//*[@id="content"]/div/div[1]/ol/li[numa]/div/div[1]/em/text()',numa=num)
  • # 电影名称
  • movieName = i.xpath('div[@class="hd"]/a/span[@class="title"]/text()')[0]
  • #评星
  • mobieStart = i.xpath('//div[@class="star"]/span[2]/text()')[num]
  • # 电影信息
  • movieInfo = i.xpath('div[@class="bd"]/p[1]/text()')
  • # 电影简述
  • movieDescribes = i.xpath('//span[@class="inq"]/text()')
  • # 电影评论人数
  • movieNums = i.xpath('//div[@class="star"]/span[4]/text()')
  • # 上映国家
  • moviePeople = movieInfo[1].replace(" ", "").replace("\n", "").split("/")[1]
  • # 电影上映时间
  • movieDate = movieInfo[1].replace(" ", "").replace("\n", "").split("/")[0]
  • # 获取电影的每一条简述
  • movieDescribe = movieDescribes[num]
  • # 获取每一个电影的评论人数
  • movieNum = movieNums[num]
  • #将要写入excel的字段值赋给row[]
  • row = [movieNo,movieName,mobieStart,movieNum,moviePeople,movieDate,movieDescribe]
  • #调用写数据的函数
  • write_excel_xlsx(excel_path,row)
  • num += 1
  • except Exception as e:
  • # print(e)
  • break
  • #新建xlsx文件
  • def create_excel_xlsx(excel_path,sheet_name):
  • wb = openpyxl.Workbook()
  • sheet_name = wb.create_sheet(sheet_name,index=0)
  • #定义标题首行
  • row = ['序列','电影名称','评星','评论人数','上映国家','上映时间','简述']
  • sheet_name.append(row)
  • wb.save(filename=excel_path)
  • #向excel文件中写入数据
  • def write_excel_xlsx(excel_path,row):
  • wb = openpyxl.load_workbook(filename=excel_path)
  • sheet_name = wb.active
  • sheet_name.append(row)
  • wb.save(filename=excel_path)
  • if __name__ == '__main__':
  • num = 0
  • #定义文件名和sheet页名称
  • excel_path = '2020movies_top250.xlsx'
  • sheet_name = '豆瓣电影排行top250'
  • #调用创建excel的函数,并写入首行作为标题
  • create_excel_xlsx(excel_path, sheet_name)
  • #这里rang(10)是循环10页
  • for i in range(10):
  • #指定要爬虫的网页url
  • page = 'https://movie.douban.com/top250?start=%d&filter=' % num
  • moviesInfo(page)
  • #指定每页多少部电影,这里是每页25部电影,共10页,因此是250部电影
  • num += 25

代码中都已经加了注释,这里就不再对代码进行一一说明了。

4.运行效果

从代码中可以看出,我们写入的文件名是当前工程目录下的“2020movies_top250.xlsx”文件,sheetName是“豆瓣电影排行top250”,打开文件展示部分内容如下:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门