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进行稳定可靠的文件操作详解
Dec 31 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
目前最全的python的就业方向
Jun 05 Python
使用python读取csv文件快速插入数据库的实例
Jun 21 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
python集合是否可变总结
Jun 20 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 Python
python实现自动清理文件夹旧文件
May 10 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
Django 路由层URLconf的实现
2019/12/30 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
python GUI计算器的实现
2020/10/09 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
导游的职业规划书范文
2013/12/27 职场文书
校园十大歌手策划书
2014/02/01 职场文书
白血病捐款倡议书
2014/05/14 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
研究生简历自我评
2015/03/11 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
员工规章制度范本
2015/08/07 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js
php+laravel 扫码二维码签到功能
2021/05/15 PHP