python-爬虫爬取豆瓣Top250电影数据

目标效果:
python-爬虫爬取豆瓣Top250电影数据_第1张图片

 

代码:
 

#-*- codeing =utf-8 -*-
#################引入模块#################
from bs4 import BeautifulSoup  #网页解析,获取数据
import re   #正则表达式,
import urllib.request,urllib.error   #制定URL,获取网页数据
import xlwt   #进行excel制作

#################定义变量#################
findLink=re.compile(r'')   #创建正则表达式对象,影片链接规则
findImgSrc=re.compile(r'(.*)')   #影片片名
findRating=re.compile(r'(.*)')
findJudge=re.compile(r'(\d*)人评价')   #评价人数
findInq=re.compile(r'(.*)')   #找到概况
findBd=re.compile(r'

(.*?)

',re.S) #相关内容 #################定义方法################# def main(): baseurl="https://movie.douban.com/top250?start=" #1.爬取网页 dataList=getData(baseurl) savepath="豆瓣电影Top250.xls" #3.保存数据 saveData(dataList,savepath) """爬取网页""" def getData(baseurl): dataList=[] #列表,存储网页获取的所有数据 for i in range(0,10): #调用获取页面信息的函数10次 url=baseurl+str(i*25) #循环每页的网址 html=askURL(url) #保存获取到的网页源码 # 2.解析数据 soup=BeautifulSoup(html,"html.parser") #使用html解析器 for item in soup.find_all('div',class_="item"): #找到所有class是item的div data=[] #保存一部电影的所有信息 item=str(item) #转换成字符串 link=re.findall(findLink,item) [0] #re库通过正则表达式查找指定的字符串,获取影片链接 data.append(link) imgSrc=re.findall(findImgSrc,item)[0] #查询图片 data.append(imgSrc) titles=re.findall(findTitle,item) #查询题目 if(len(titles)==2): ctitle=titles[0] data.append(ctitle) #添加中文名 otitle=titles[1].replace("/","") #去掉无关的服号 data.append(otitle) #添加外文名 else: data.append(titles[0]) data.append(' ') #外文名留空 rating=re.findall(findRating,item)[0] data.append(rating) #添加评分 judgeNum=re.findall(findJudge,item)[0] data.append(judgeNum) inq=re.findall(findInq,item) if len(inq)!=0: inq=inq[0].replace("。","") #去掉句号 data.append(inq) #添加概况 else: data.append(" ") #留空 bd=re.findall(findBd,item)[0] bd=re.sub('(\s+)?'," ",bd) #去掉
bd=re.sub('/'," ",bd) data.append(bd.strip()) #去掉空格 dataList.append(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/83.0.4103.56 Safari/537.36 Edg/83.0.478.3"} #用户代理,发送请求时把python程序伪装成浏览器,蒙混过豆瓣服务器 request=urllib.request.Request(url,headers=head) html="" try: response=urllib.request.urlopen(request) html=response.read().decode("utf-8") except urllib.error.URLError as e: if hasattr(e,"code"): #判断e这个对象里是否包含code这个属性 print(e.code) #打印错误代码 if hasattr(e,"reason"): print(e.reason) #打印错误原因 return html """保存数据""" def saveData(dataList,savePath): book=xlwt.Workbook(encoding="utf-8") #创建workbook对象 sheet=book.add_sheet('豆瓣电影Top') #创建工作表 col=("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息") for i in range(0,8): sheet.write(0,i,col[i]) #列名 for i in range(0,250): print("第%d条" % (i + 1)) data=dataList[i] for j in range(0,8): sheet.write(i+1,j,data[j]) #数据 book.save(savePath) #################主程序################# if __name__=="__main__": main() print("爬取完毕!")

关于代码中askURL方法中下边这一条数据获得方法:

head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.56 Safari/537.36 Edg/83.0.478.3"}   #用户代理,发送请求时把python程序伪装成浏览器,蒙混过豆瓣服务器

打开豆瓣Top250,按F12显示开发者页面:

python-爬虫爬取豆瓣Top250电影数据_第2张图片

打开网络模块:

python-爬虫爬取豆瓣Top250电影数据_第3张图片

刷新页面,当进度条出现时点红色圆点停止:

python-爬虫爬取豆瓣Top250电影数据_第4张图片

点击最前边一条线,选择唯一出现的top250,然后进度条拉到最后:
python-爬虫爬取豆瓣Top250电影数据_第5张图片

你可能感兴趣的:(python)