# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import chardet
import re
import xlwt
#获取某页的内容
def getHtml(index=0):
print('正在抓取第{}页信息'.format(index+1))
url = 'https://movie.douban.com/top250?start='+str(index*25)+'&filter='
r = requests.get(url)
code = chardet.detect(r.content)['encoding']
# print(code) #utf-8
return r.content.decode(code)
def getData(page):
dataList = []
for i in range(page):
html = getHtml(i)
soup = BeautifulSoup(html,'html.parser')
#先找到父元素
parent = soup.find('div',attrs={'id':'content'}) #一定要先找到id的位置,通过id的位置找到父元素
# print(type(parentDiv)) #<class 'bs4.element.Tag'>
lis = parent.find_all('li')
for each in lis:
data = []
#获取电影名称
filmName = each.find('div',attrs={'class': 'hd'}).find('span',attrs={'class': 'title'}).string # 方法三
data.append(filmName)
#获取电影放映时间
reg1 = re.compile('.*(\d{4}).*') # 通过正则只获取中间的4个数字
filmTimeStr = each.find('div',attrs={'class': 'bd'}).find('p').get_text()
filmTime = re.findall(reg1,filmTimeStr)[0] #获取第一个匹配的正则数字
data.append(filmTime)
# 获取电影评分
film_score = each.find('div',attrs={'class':'star'}).find_all('span')[1].get_text()
data.append(film_score)
#获取电影评分人数each
reg2 = re.compile('(\d*)') #匹配任意个数字
discussNumStr = each.find('div',attrs={'class': 'star'}).find_all('span')[3].get_text()
discussNum = re.findall(reg2, discussNumStr)[0] # 获取第一个匹配的正则数字
data.append(discussNum)
#获取电影影评, 因为有个别没有简评标签,所以加判断
if each.find('p', attrs={'class': 'quote'}): #判断是否有p对象
filmReview = each.find('p', attrs={'class': 'quote'})\
.find('span').get_text() #如果p标签里只有一个span就不需要指定span的attrs
else:
filmReview = ''
data.append(filmReview)
dataList.append(data)
return dataList
# print(getData())
def saveToExcel(page,filename):
wbk = xlwt.Workbook()
sheet = wbk.add_sheet('豆瓣电影信息')
dataList = getData(page)
title_list = ["电影名称", "上映时间", "豆瓣评分", "豆瓣影评"]
# 写入表头
for i in range(len(title_list)):
sheet.write(0, i, title_list[i])
#写入电影数据
for j,each in enumerate(dataList):
for k,value in enumerate(each):
sheet.write(j+1,k,value)
wbk.save(filename)
saveToExcel(10,'豆瓣电影排行榜.xls')
print('结束')
使用BeautifulSoup方法抓取豆瓣电影信息
猜你喜欢
转载自blog.csdn.net/qq_42379006/article/details/80643526
今日推荐
周排行