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用ConfigObj读写配置文件的实现代码
Mar 04 Python
django 修改server端口号的方法
May 14 Python
Pycharm设置界面全黑的方法
May 23 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
对python中词典的values值的修改或新增KEY详解
Jan 20 Python
python 多个参数不为空校验方法
Feb 14 Python
基于Python实现用户管理系统
Feb 26 Python
python中列表的切片与修改知识点总结
Jul 23 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 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
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python+pandas计算数据相关系数的实例
2018/07/03 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
Python实现某论坛自动签到功能
2019/08/20 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
opencv python图像梯度实例详解
2020/02/04 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
Python 日期与时间转换的方法
2020/08/01 Python
python 8种必备的gui库
2020/08/27 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
教师党员个人总结
2015/02/10 职场文书
税务会计岗位职责
2015/04/02 职场文书
警告通知
2015/04/25 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
离婚案件原告代理词
2015/05/23 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
SQLServer常见数学函数梳理总结
2022/08/05 MySQL