Python实现的爬取豆瓣电影信息功能案例


Posted in Python onSeptember 15, 2019

本文实例讲述了Python实现的爬取豆瓣电影信息功能。分享给大家供大家参考,具体如下:

本案例的任务为,爬取豆瓣电影top250的电影信息(包括序号、电影名称、导演和主演、评分以及经典台词),并将信息作为字典形式保存进txt文件。这里只用到requests库,没有用到beautifulsoup库

step1:首先获取每一页的源代码,用requests.get函数获取,为了防止请求错误,使用try...except..

def getpage(url):
  try:
    res=requests.get(url)
    if res.status_code==200:
      return res.text
    return None
  except RequestException:
    return None

step2:做每一页的网址解析,打开原网址https://movie.douban.com/top250?,查看网页源代码,可以看到每一个电影的源代码都是从<li>开始,在</li>处结束,写好正则表达式以后爬到的列表的每一条item都有五个元素,因此将其写成字典的形式,这里用到yield函数(关于yield函数的用法,廖老师的有一篇文章比较好懂https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/)

Python实现的爬取豆瓣电影信息功能案例

对单个网页的进行解析的代码如下:

def parsepage(html):
  pat=re.compile('<li>.*?<em class="">(.*?)</em>.*?<img width="100" alt="(.*?)" src=.*?<p class="">'
          +'(.*?)</p>.*?property="v:average">(.*?)</span>.*?<span class="inq">(.*?)</span>.*?</li>',re.S)
  items=re.findall(pat,html)
  for item in items:
    yield{
      'index':item[0],
      'title':item[1],
      'stars':item[2].strip(),
      'score':item[3],
      'concept':item[4]
    }

下面的代码是将每一个item写入文件,这里encoding='utf-8' 和ensure_ascii=False都是使写入文件时中文能保持不变,json.dumps可以将(字典)对象转化成字符串(但前面要先import json),with open的第二个参数为a,表示每次写入时,是往后追加(续接),而不是后一次写入将之前内容覆盖,\n是指要每一次写入一个item之后要换行。

def write_tofile(content):
  with open('doubanfilms.txt','a',encoding='utf-8' ) as f:
    f.write(json.dumps(content,ensure_ascii=False)+'\n')
    f.close()

最后,需要用循环语句将每一页(共10页)内容都进行以上操作。这里,第二页的网址就是在第一页的url上加上一个start=25, 第三页是加上start=50,也就是每一页的start=为25*i。最后一段代码如下:

def main():
  url="https://movie.douban.com/top250?"
  for i in range(0,9):
    url_i=url+'start='+str(25*i)
    html_i=getpage(url_i)
    for item in parsepage(html_i):
      print(item)
      write_tofile(item)
if __name__ == '__main__':
  main()

当然,这一段代码还有一种写法:

def main(start):
  url="https://movie.douban.com/top250?start="+str(start)
  html=getpage(url)
  for item in parsepage(html):
    print(item)
    write_tofile(item)
if __name__ == '__main__':
  for i in range(10):
    main(i*10)

如果想让你的程序跑的更快,可以用多线程爬虫(当然这里其实没有必要):

#在最开始加载Pool包
from multiprocessing import Pool
#最后的执行段改为:
if __name__ == '__main__':
  for i in range(10):
    main(i*10)
  pool=Pool() #在循环外写
  pool.map(main,[i*10 for i in range (10)])

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
用Python写的图片蜘蛛人代码
Aug 27 Python
tornado框架blog模块分析与使用
Nov 21 Python
Python下使用Psyco模块优化运行速度
Apr 05 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
Python新手们容易犯的几个错误总结
Apr 01 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
python爬虫之遍历单个域名
Nov 20 Python
Pytorch中的数据集划分&正则化方法
May 27 Python
Python数据库小程序源代码
Sep 15 #Python
python中树与树的表示知识点总结
Sep 14 #Python
python树的同构学习笔记
Sep 14 #Python
python图形绘制奥运五环实例讲解
Sep 14 #Python
python列表插入append(), extend(), insert()用法详解
Sep 14 #Python
postman传递当前时间戳实例详解
Sep 14 #Python
Python 经典算法100及解析(小结)
Sep 13 #Python
You might like
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
PHPMailer邮件发送的实现代码
2013/05/04 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
python的socket编程入门
2018/01/29 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
建筑专业自荐信范文
2014/01/05 职场文书
求职信范文英文版
2014/01/05 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
标准毕业生自荐信
2014/06/24 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
会计工作总结范文2014
2014/12/23 职场文书
辞职信标准格式
2015/02/27 职场文书
2015年卫生局工作总结
2015/07/24 职场文书