Python爬虫包BeautifulSoup学习实例(五)


Posted in Python onJune 17, 2018

本文为大家分享了Python爬虫包BeautifulSoup学习实例,具体内容如下

BeautifulSoup

使用BeautifulSoup抓取豆瓣电影的一些信息。

# -*- coding: utf-8 -*-
# @Author: HaonanWu
# @Date:  2016-12-24 16:18:01
# @Last Modified by:  HaonanWu
# @Last Modified time: 2016-12-24 17:25:33

import urllib2
import json
from bs4 import BeautifulSoup

def nowplaying_movies(url):
  user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'
  headers = {'User-Agent':user_agent}
  request = urllib2.Request(url = url, headers = headers)
  response = urllib2.urlopen(request)
  soup_packetpage = BeautifulSoup(response, 'lxml')
  items = soup_packetpage.findAll("li", class_="list-item")
  # items = soup_packetpage.findAll("li", {"class" : "list-item"}) 等价写法
  movies = []
  for item in items:
    if item.attrs['data-category'] == 'nowplaying':
      movie = {}
      movie['title'] = item.attrs['data-title']
      movie['score'] = item.attrs['data-score']
      movie['director'] = item.attrs['data-director']
      movie['actors'] = item.attrs['data-actors']
      movies.append(movie)
      print('%(title)s|%(score)s|%(director)s|%(actors)s' % movie)

  return movies



if __name__ == '__main__':
  url = 'https://movie.douban.com/nowplaying/beijing/'
  movies = nowplaying_movies(url)

  print('%s' % json.dumps(movies, sort_keys=True, indent=4, separators=(',', ': ')))

HTMLParser

使用HTMLParser实现上述功能

这里有一些HTMLParser的基础教程

由于HtmlParser自2006年以后就再没更新,目前很多人推荐使用jsoup代替它。

# -*- coding: utf-8 -*-
# @Author: HaonanWu
# @Date:  2016-12-24 15:57:54
# @Last Modified by:  HaonanWu
# @Last Modified time: 2016-12-24 17:03:27
from HTMLParser import HTMLParser
import urllib2
import json

class MovieParser(HTMLParser):
  def __init__(self):
    HTMLParser.__init__(self)
    self.movies = []

  def handle_starttag(self, tag, attrs):
    def _attr(attrlist, attrname):
      for attr in attrlist:
        if attr[0] == attrname:
          return attr[1]
      return None
    if tag == 'li' and _attr(attrs, 'data-title') and _attr(attrs, 'data-category') == 'nowplaying':
      movie = {}
      movie['title'] = _attr(attrs, 'data-title')
      movie['score'] = _attr(attrs, 'data-score')
      movie['director'] = _attr(attrs, 'data-director')
      movie['actors'] = _attr(attrs, 'data-actors')
      self.movies.append(movie)
      print('%(title)s|%(score)s|%(director)s|%(actors)s' % movie)


def nowplaying_movies(url):
  headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}  
  req = urllib2.Request(url, headers=headers)
  s = urllib2.urlopen(req)
  parser = MovieParser()
  parser.feed(s.read())
  s.close()
  return parser.movies


if __name__ == '__main__':
  url = 'https://movie.douban.com/nowplaying/beijing/'
  movies = nowplaying_movies(url)

  print('%s' % json.dumps(movies, sort_keys=True, indent=4, separators=(',', ': ')))

以上全部为本篇文章的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用元类的教程
Apr 28 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
TensorFlow实现卷积神经网络CNN
Mar 09 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
详解Python做一个名片管理系统
Mar 14 Python
python word转pdf代码实例
Aug 16 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Python读取表格类型文件代码实例
Feb 17 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 #Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 #Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 #Python
python主线程捕获子线程的方法
Jun 17 #Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 #Python
Python实现自定义函数的5种常见形式分析
Jun 16 #Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 #Python
You might like
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
python回调函数用法实例分析
2015/05/09 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
数据管理员的自我评价分享
2013/11/15 职场文书
企业新年寄语
2014/04/04 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书