最终成品:将豆瓣top250的排名、影名、评分、评分人数和影片链接保存到excel文档中
我的环境:python3.10+pycharm
- 第一步:在pycharm内通过控制台下载selenium工具。
- 第二步:下载xlwt插件来创建和写excel文件,下载方式同上,指令改为:
pip install xlwt
- 第三步:新建python项目,在项目中新建两个python file,分别命名main.py和movie.py
- 第四步:编写movie.py文件,代码如下:
class Movie:
def __init__(self,rank,name,score,number,href):
self.rank = rank
self.name = name
self.score = score
self.number = number
self.href = href
def print(self):
print(self.rank)
print(self.name)
print(self.score)
print(self.number)
print(self.href)
- 第五步:编写main.py,代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from Movie import Movie
import xlwt
'''
初始化浏览器驱动
'''
def driverInit():
driver = webdriver.Chrome()
driver.get("https://movie.douban.com/top250")
return driver
'''
初始化excel表格,并完成表格的第一行电影的相关信息
'''
def excelInit():
global wb
global writer
wb = xlwt.Workbook()
writer = wb.add_sheet("排名一 览")
writer.write(0,0,"排名")
writer.write(0,1,"名称")
writer.write(0,2,"评分")
writer.write(0,3,"评分人数")
writer.write(0,4,"链接直达")
'''
将一部电影信息写入excel表格中
'''
def writeMovie(movie):
writer.write(movie.rank, 0, movie.rank)
writer.write(movie.rank, 1, movie.name)
writer.write(movie.rank, 2, movie.score)
writer.write(movie.rank, 3, movie.number)
writer.write(movie.rank, 4, movie.href)
'''
通过浏览器驱动获取电影信息,并且返回一个电影对象
'''
def getMovie(index,pageIndex):
indexStr = str(index)
name = driver.find_element(By.XPATH, "//*[@id='content']/div/div[1]/ol/li["+indexStr+"]/div/div[2]/div[1]/a/span[1]").text
score = driver.find_element(By.XPATH, "//*[@id='content']/div/div[1]/ol/li["+indexStr+"]/div/div[2]/div[2]/div/span[2]").text
number = driver.find_element(By.XPATH, "//*[@id='content']/div/div[1]/ol/li["+indexStr+"]/div/div[2]/div[2]/div/span[4]").text
href = driver.find_element(By.XPATH, "//*[@id='content']/div/div[1]/ol/li["+indexStr+"]/div/div[1]/a").get_attribute("href")
return Movie((pageIndex-1)*25+index,name,score,number[:-3],href)
'''
通过浏览器驱动控制前往豆瓣top250的下一位
'''
def nextPage():
driver.find_element(By.LINK_TEXT,"后页>").click()
'''
获取豆瓣top250
'''
def getTop250():
totalPageNumber = 10 # 一共多少页
pageItemNumber = 25 # 每页多少条信息
for pageIndex in range(1, totalPageNumber + 1):
for index in range(1, pageItemNumber + 1):
getMovie(index, pageIndex)
movie = getMovie(index, pageIndex)
movie.print()
writeMovie(movie)
if pageIndex != totalPageNumber:
nextPage()
'''
主函数
'''
if __name__ == '__main__':
driver = driverInit()
excelInit()
getTop250()
wb.save("top250.xls")
- 第六步:运行main.py即可,过程中会不断打印信息,如果没有打印,则检查是否出错了,最后等待爬取完成,项目目录下会出现一个名为“top250.xls”的excel文档。