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逐行读取文件内容的三种方法
Jan 20 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
python实现简单反弹球游戏
Apr 12 Python
编写python程序的90条建议
Apr 14 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 Python
python四种出行路线规划的实现
Jun 23 Python
Python 避免字典和元组的多重嵌套问题
Jul 15 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缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
详解PHP队列的实现
2019/03/14 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
python数据结构树和二叉树简介
2014/04/29 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
python实现海螺图片的方法示例
2019/05/12 Python
pytorch forward两个参数实例
2020/01/17 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
翻译专业应届生求职信
2013/11/23 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
工地宣传标语
2014/06/18 职场文书
党员检讨书
2014/10/13 职场文书
MySQL 数据类型详情
2021/11/11 MySQL
Promise静态四兄弟实现示例详解
2022/07/07 Javascript