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 04 Python
遗传算法python版
Mar 19 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
python创建文件时去掉非法字符的方法
Oct 31 Python
详解django+django-celery+celery的整合实战
Mar 19 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
三个python爬虫项目实例代码
Dec 28 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
python简单实现最大似然估计&amp;scipy库的使用详解
Apr 15 Python
python 一维二维插值实例
Apr 22 Python
利用Python将图片中扭曲矩形的复原
Sep 07 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 session有效期问题
2009/04/26 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
团队激励口号
2014/06/06 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
python爬虫框架feapde的使用简介
2021/04/20 Python
MySQL 慢查询日志深入理解
2021/04/22 MySQL
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js