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的Bottle框架中获取制定cookie的教程
Apr 24 Python
Python实现字典依据value排序
Feb 24 Python
Python文本特征抽取与向量化算法学习
Dec 22 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
python 输出上个月的月末日期实例
Apr 11 Python
python实现烟花小程序
Jan 30 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 Python
Python配置pip国内镜像源的实现
Aug 20 Python
Pandas之缺失数据的实现
Jan 06 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
php实现网站插件机制的方法
2009/11/10 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
php常用的url处理函数总结
2014/11/19 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
flash 得到自身url参数的代码
2009/11/15 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
python 中的divmod数字处理函数浅析
2017/10/17 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python反转序列的方法实例分析
2018/03/21 Python
Python 修改列表中的元素方法
2018/06/26 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
德购商城:德国进口直邮商城
2017/06/13 全球购物
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
大专学生推荐信范文
2013/11/19 职场文书
社区活动邀请函范文
2014/01/29 职场文书
社区国庆节活动总结
2015/03/23 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
Python 如何安装Selenium
2021/05/06 Python
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers