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 21 Python
python批量同步web服务器代码核心程序
Sep 01 Python
python集合类型用法分析
Apr 08 Python
python实现SMTP邮件发送功能
Jun 16 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
Feb 21 Python
Python聊天室程序(基础版)
Apr 01 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
Python这样操作能存储100多万行的xlsx文件
Apr 16 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
Python循环实现n的全排列功能
Sep 16 Python
pytorch 实现变分自动编码器的操作
May 24 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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
php中strtotime函数性能分析
2016/11/20 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
班组长安全生产职责
2013/12/16 职场文书
离职保密承诺书
2014/05/28 职场文书
年检委托书
2014/08/30 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
故宫导游词
2015/01/31 职场文书
教师岗位职责范本
2015/04/02 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
2015年科普工作总结
2015/07/23 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书