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环境配置及项目建立
Jun 30 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
python生成随机红包的实例写法
Sep 02 Python
Python装饰器使用你可能不知道的几种姿势
Oct 25 Python
Django继承自带user表并重写的例子
Nov 18 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
详解Python 循环嵌套
Jul 09 Python
Python try except finally资源回收的实现
Jan 25 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 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随机生成福彩双色球号码的2种方法
2013/02/04 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
jQuery操作css样式
2017/05/15 jQuery
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
python连接MySQL数据库实例分析
2015/05/12 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
python实现图片识别汽车功能
2018/11/30 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
python实现年会抽奖程序
2019/01/22 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
nohup的用法
2012/11/26 面试题
教学质量评估实施方案
2014/03/17 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js
css3 文字断裂效果
2022/04/22 HTML / CSS