Python爬虫——爬取豆瓣电影Top250代码实例


Posted in Python onApril 17, 2019

利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Excel表中。基本上爬取结果还是挺好的。具体代码如下:

#!/usr/bin/python
#-*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from bs4 import BeautifulSoup
import re
import urllib2
import xlwt

#得到页面全部内容
def askURL(url):
  request = urllib2.Request(url)#发送请求
  try:
    response = urllib2.urlopen(request)#取得响应
    html= response.read()#获取网页内容
    #print html
  except urllib2.URLError, e:
    if hasattr(e,"code"):
      print e.code
    if hasattr(e,"reason"):
      print e.reason
  return html

#获取相关内容
def getData(baseurl):
  findLink=re.compile(r'<a href="(.*?)" rel="external nofollow" >')#找到影片详情链接
  findImgSrc=re.compile(r'<img.*src="(.*jpg)"',re.S)#找到影片图片
  findTitle=re.compile(r'<span class="title">(.*)</span>')#找到片名
  #找到评分
  findRating=re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
  #找到评价人数
  findJudge=re.compile(r'<span>(\d*)人评价</span>')
  #找到概况
  findInq=re.compile(r'<span class="inq">(.*)</span>')
  #找到影片相关内容:导演,主演,年份,地区,类别
  findBd=re.compile(r'<p class="">(.*?)</p>',re.S)
  #去掉无关内容
  remove=re.compile(r'              |\n|</br>|\.*')
  datalist=[]
  for i in range(0,10):
    url=baseurl+str(i*25)
    html=askURL(url)
    soup = BeautifulSoup(html, "html.parser")
    for item in soup.find_all('div',class_='item'):#找到每一个影片项
      data=[]
      item=str(item)#转换成字符串
      #print item
      link=re.findall(findLink,item)[0]
      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(remove,"",bd)
      bd=re.sub('<br>'," ",bd)#去掉<br>
      bd=re.sub('/'," ",bd)#替换/
      #data.append(bd)
      words=bd.split(" ")
      for s in words:
        if len(s)!=0 and s!=' ':#去掉空白内容
           data.append(s)
      #主演有可能因为导演内容太长而没有
      if(len(data)!=12):
        data.insert(8,' ')#留空
      datalist.append(data)
  return datalist

#将相关数据写入excel中
def saveData(datalist,savepath):
  book=xlwt.Workbook(encoding='utf-8',style_compression=0)
  sheet=book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)
  col=('电影详情链接','图片链接','影片中文名','影片外国名',
        '评分','评价数','概况','导演','主演','年份','地区','类别')
  for i in range(0,12):
    sheet.write(0,i,col[i])#列名
  for i in range(0,250):
    data=datalist[i]
    for j in range(0,12):
      sheet.write(i+1,j,data[j])#数据
  book.save(savepath)#保存

def main():
  baseurl='https://movie.douban.com/top250?start='
  datalist=getData(baseurl)
  savapath=u'豆瓣电影Top250.xlsx'
  saveData(datalist,savapath)

main()

Excel表部分内容如下:

Python爬虫——爬取豆瓣电影Top250代码实例

以上所述是小编给大家介绍的Python爬取豆瓣电影Top250实例详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
详解Python中如何写控制台进度条的整理
Mar 07 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
Python实现CAN报文转换工具教程
May 05 Python
PyQt5实现简单的计算器
May 30 Python
python2和python3哪个使用率高
Jun 23 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
详解分布式系统中如何用python实现Paxos
May 18 Python
Python2与Python3的区别实例总结
Apr 17 #Python
详解Python用户登录接口的方法
Apr 17 #Python
详解python中递归函数
Apr 16 #Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 #Python
详解Python连接MySQL数据库的多种方式
Apr 16 #Python
详解Python学习之安装pandas
Apr 16 #Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
Apr 16 #Python
You might like
php xml文件操作代码(一)
2009/03/20 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
php获取根域名方法汇总
2014/10/28 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python简单实现enum功能的方法
2016/04/25 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
python实现flappy bird小游戏
2018/12/24 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
python logging.info在终端没输出的解决
2020/05/12 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
李宁官方网店:中国运动品牌
2017/11/02 全球购物
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
关于读书的活动方案
2014/08/14 职场文书
优秀纪检干部材料
2014/08/27 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
在js中修改html body的样式
2021/11/11 Javascript