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基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
Python并发之多进程的方法实例代码
Aug 15 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
使用K.function()调试keras操作
Jun 17 Python
Python 下载Bing壁纸的示例
Sep 29 Python
Python图像处理之图像拼接
Apr 28 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
Javascript函数的参数
2015/07/16 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
Javascript的this用法
2017/01/16 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
学校交通安全责任书
2014/08/25 职场文书
违纪开除通知书
2015/04/25 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
vue特效之翻牌动画
2022/04/20 Vue.js