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使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
Python 多线程抓取图片效率对比
Feb 27 Python
详解Python中的文件操作
Aug 28 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
python爬虫爬取网页表格数据
Mar 07 Python
python实现简单的单变量线性回归方法
Nov 08 Python
Python实现查找字符串数组最长公共前缀示例
Mar 27 Python
如何使用Python实现斐波那契数列
Jul 02 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
Python判断变量是否是None写法代码实例
Oct 09 Python
Python基础之条件语句详解
Jun 16 Python
pycharm无法安装cv2模块问题
May 20 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 采集书并合成txt格式的实现代码
2009/03/01 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
node.js实现端口转发
2016/04/14 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
DOM事件探秘篇
2017/02/15 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
token 机制和实现方式
2020/12/15 Javascript
Python操作串口的方法
2015/06/17 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
python ChainMap的使用和说明详解
2019/06/11 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
应届生新闻编辑求职信
2013/11/19 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
太空授课观后感
2015/06/17 职场文书