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的反射机制
Jun 28 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
Python实现邮件的批量发送的示例代码
Jan 23 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
详解使用Python下载文件的几种方法
Oct 13 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
python 基于wx实现音乐播放
Nov 24 Python
python unichr函数知识点总结
Dec 16 Python
Python Django 后台管理之后台模型属性详解
Apr 25 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
如何运行Python程序的方法
2013/04/21 Python
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
python 为什么说eval要慎用
2019/03/26 Python
python二元表达式用法
2019/12/04 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
python链表类中获取元素实例方法
2021/02/23 Python
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
地心历险记观后感
2015/06/15 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA