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使用MONGODB入门实例
May 11 Python
Python的时间模块datetime详解
Apr 17 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
Jun 28 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
python面向对象 反射原理解析
Aug 12 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
python剪切视频与合并视频的实现
Mar 03 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
基于Python实现流星雨效果的绘制
Mar 18 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
Python读写Redis数据库操作示例
2014/03/18 Python
python中字典dict常用操作方法实例总结
2015/04/04 Python
python 19个值得学习的编程技巧
2020/08/15 Python
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
经典优秀个人求职信分享
2013/12/12 职场文书
企业厂长岗位职责
2013/12/17 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
2015年女生节活动总结
2015/02/27 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书