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发送各类邮件的主要方法
Dec 22 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
Sanic框架安装与简单入门示例
Jul 16 Python
Puppeteer使用示例详解
Jun 20 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 Python
Python学习笔记之While循环用法分析
Aug 14 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
flask框架中的cookie和session使用
Jan 31 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
收集的二十一个实用便利的PHP函数代码
2010/04/22 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
python使用urllib2提交http post请求的方法
2015/05/26 Python
Django中的用户身份验证示例详解
2019/08/07 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
公司活动邀请函
2014/01/24 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
先进单位申报材料
2014/12/25 职场文书
教师工作证明范本
2015/06/12 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
python实现简单反弹球游戏
2021/04/12 Python
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS