本文介绍了Beautiful Soup,PYTHON实现的HTML/XML标记的解析器;简要描述了Beautiful Soup的安装以及使用;最后以抽取微博用户关注信息为例详细的演示了如何使用Beautiful Soup。

什么是Beautiful Soup

Beautiful Soup是用PYTHON实现的HTML/XML标记的解析器。它提供简单和通用的方法对HTML/XML语法树进行浏览(navigating),搜索(searching)以及修改(searching)。它甚至可以针对不规范的标记生成语法树,可以大大地减少开发人员的时间。

Beautiful Soup is an HTML/XML parser for Python that can turn even invalid markup into a parse tree. It provides simple, idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers hours or days of work.

安装Beautiful Soup

安装Beautiful Soup很简单,如果你已经安装过pip或者easy_install,如果您还没有安装过Python安装工具,建议您参考Install Python Setuptools/Distribute for Python2 and Python3。

sudo easy_install beautifulsoup4

需要注意的是:BeautifulSoup4支持Python 2.x和3.x,而BeautifulSoup3只支持Python 2.x,Beautiful Soup官网建议大家应该使用BeautifulSoup4而不是BeautifulSoup3。

Beautiful Soup 3 only works on Python 2.x, but Beautiful Soup 4 also works on Python 3.x. Beautiful Soup 4 is faster, has more features, and works with third-party parsers like lxml and html5lib. You should use Beautiful Soup 4 for all new projects.

使用Beautiful Soup

首先,导入Beautiful Soup。

from bs4 import BeautifulSoup

注意如果你使用的是BeautifulSoup3,那么导入语句可能是:

from BeautifulSoup import BeautifulSoup

然后,使用BeautifulSoup为你生成标记语言的语法树。

soup = BeautifulSoup(open('my.html'))

得到了语法树soup之后,就可以调用相应的接口浏览,搜索和修改你的标记文件。比如下面的语句搜索my.html中所有’action-type’是’user_item’的div:

soup.findAll('div', attrs={'action-type' : 'user_item'})

上面简单介绍了Beautiful Soup的安装和使用,更多Beautiful Soup的文档请参考官方文档bs3和bs4。下面我们以从WEIBO.COM页面中解析出用户的关注信息为例,介绍Beautiful Soup的使用。

Beautiful Soup实例:解析微博用户的关注信息

社交网络中的关注信息(followings)是用户对什么人/东西感兴趣的一种表达,从关注信息中可以得到用户的兴趣偏好,又因为关注信息有用户自己维护,所以相对于粉丝(followers)信息更能体现个人偏好。以微博来说,关注就是用户关注的人,一般认为用户是根据自己的兴趣爱好出发有选择的关注帐号。

微博中有两种关注,我的关注和他人的关注,由于这两种关注的页面结构不同,所以在解析的时候需要分别对待,但是分析的过程是同理的,只是在抽取数据是的页面标签不一样,使用上面的Beautiful Soup工具,抽取时标签的定位会很容易,这就是使用Beautiful Soup带来的好处。

1.使用浏览器的Inspect Element功能理解页面的结构

最新版的Chrome和Firefox都自身内置有Inspect Element功能,在编写代码时,可能要经常的使用它来定位要寻找的页面元素。Chrome浏览器Inspect Element的使用请参考Chrome Developer Tools - Elements Panel。

2.从页面中提取用户关注的HTML字段,构建Beautiful Soup对象

通过上面一步的分析,我们大致了解用户关注列表的页面结构,接下来就把页面文件/流导入到Beautiful Soup中,让它为我们生成页面结构树。可是当我们查看新浪微博页面源码的时候,情况却不是这样的,我们发现页面源码中很多信息并不是以HTML元素的形式呈现,而是以plain文本形式放到了页面的Javacript脚本里面,这时就更加凸显了Beautiful Soup的伟大之处了,只要我们在Script里面找到了相应的代码(实际上是json格式存放的数据),抽取出来再导入到Beautiful Soup中,这个问题也就迎刃而解。下面的正则表达式用来从页面中提取Script中的json数据并且使用其中的HTML字段生成soup:

def parse_followings(page_content):'''@param page_content: html page file or response stream from Internet'''#reguler expression to extract json data which contains html infopatt_view = ''patt = re.compile(patt_view, re.MULTILINE)weibo_scripts = patt.findall(page_content)for script in weibo_scripts:view_json = json.loads(script)if 'html' in view_json and view_json['pid'] == 'pl_relation_hisFollow':html = view_json['html']soup = BeautifulSoup(html)#WOW...we got the soup

3.通过Beautiful Soup获取需要的页面元素,并从中抽取感兴趣的信息

通过上一步获得following的HTML信息,导入到Beautiful Soup中,接下来就使用Beautiful Soup抽取信息了。如何去定位元素当然有很多方式,结合Inspect Element,可以很容易的做到,获得元素之后就可以抽取需要的信息了。

#all the followings, search according element type(li) and attributesfriendollowings = soup.findAll('li', attrs={'class':'clearfix S_line1', 'action-type' : 'itemClick'})for user_item in friendollowings:action_data = user_item.get('action-data')user_info = {}for field in action_data.split("&"):field_name, field_value = field.split('=')user_info[field_name] = field_valuefor info in [more for more in user_item('div') if isinstance(more, Tag)]:class_name = info['class']if class_name == 'name':user_info['name'] = clean_content(info.a.text)user_info['address'] = clean_content(info.span.text)elif class_name == 'connect':user_info['connect'] = clean_content(info.text)elif class_name == 'face mbspace': #face imageuser_info['face'] = info.a.img['src']elif class_name == 'weibo':pass#user_info['lasttweet'] = clean_content(info.text)

结束语

文中阐述了如何使用Beautiful Soup抽取微博页面的用户关注信息,最后有几点需要提出:

1.模拟用户登录

结合本人的上一篇文章Python模拟登录新浪微博(使用RSA加密方式和Cookies文件),可以实现模拟用户登录之后发送用户关注的URL请求http://weibo.com/{uid}/follow获得用户关注的页面;

2.分页抽取

解析页面http://weibo.com/{uid}/follow可以获取用户关注的总页面数,通过http://weibo.com/{uid}/follow?page={page_num}可以实现分页抽取。

相关阅读

2. 基于UID的WEIBO信息抓取框架WEIBO_SCRAPY,详细介绍了多线程WEIBO数据抓取框架WEIBO_SCRAPY。

---EOF---

网页版微博HTML解析和提取,使用Beautiful Soup抽取网页数据,解析微博用户关注信息...相关推荐

  1. 网页版的svn怎样同步代码_学会使用Hdlbits网页版Verilog代码仿真验证平台

    大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过 "https://hdlbits.01xz.net/wiki/Main_Page&q ...

  2. 网页版2048html制作,基于HTML+CSS+JS的网页版2048的实现.pdf

    ELECTRONICS WORLD ・探索与观察 基于HTML+CSS+JS的网页版2048的实现 山西农业大学 王艺燕 [摘要] 描述了一个使用HTML和CSS进行UI界面设计,使用JS进行后台逻辑 ...

  3. 37镇魔曲网页版服务器状态,寻宝新姿势 37镇魔曲网页版帮会系统揭秘

    俗话说的好:不是一 家 人不进一家门.对于37< 镇魔曲 网页版>帮会中的人们,小编只想默默的说一句,你们都是一路的货色.一起打BOSS.分装备,这些成就了你们在游戏中结为最好的兄弟.但是 ...

  4. 爬虫之网络数据解析的三种方式---正则表达式、XPath数据解析库、BeautifulSoup数据解析库

    1.正则表达式 爬虫的四个主要步骤: 明确目标(要知道你准备取哪个范围或者网站上取搜索) 爬(将所有网站的内容全部爬下来) 取(取掉对我们没用的数据) 处理数据(按照我们想要的方式存储和使用) 什么是 ...

  5. JSON 解析,一款高颜值的 JSON 数据解析查看工具

    JSON 解析 一款高颜值的 JSON 数据解析查看工具,无需网络加载,本地即可运行,支持Object和Array两种数据格式,可以方便查看JSON数据. Git 地址:https://github. ...

  6. Python爬虫【二】爬取PC网页版“微博辟谣”账号内容(selenium同步单线程)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  7. Python爬虫【四】爬取PC网页版“微博辟谣”账号内容(selenium多线程异步处理多页面)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  8. Python爬虫【三】爬取PC网页版“微博辟谣”账号内容(selenium单页面内多线程爬取内容)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  9. 百度文件不限速下载网页版

    使用方法: KinhDownload网页版地址:https://pan.kdbaidu.com 1.打开网页地址输入百度网盘分享链接即可解析直链, 如果分享链接有密码那就填写密码后再点击进行解析等: ...

  10. 网页版简书界面优化小建议

    建议1:导读部分末尾的省略号字符可以添加单击后"展开全文"渲染效果或者直接进行简单的URL跳转,如图1: 图1 建议2:图1中的红心点赞图标没有必要做成按钮,也没有必要链接到正文U ...

最新文章

  1. python3.5怎么使用-Python3.5常见内置方法参数用法实例详解
  2. python序列类型有_Python序列类型
  3. mongodb安装教程Linux,Ubuntu16.04手动安装MongoDB的详细教程
  4. oracle中sum和count可以嵌套吗_【分享吧】Oracle查询转换
  5. 非常全面的阿里的Java面试题目,涵盖Java基础+高级+架构
  6. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_11使用骨架创建maven的java工程...
  7. PHP8.0环境详细安装教程
  8. 利用Python查询IP地址
  9. 74HC573芯片简介
  10. python 电路仿真spice_SPICE模型电路仿真器的用法及功能解析
  11. 魔兽世界服务器显示新,《魔兽世界》怀旧服再开新服,背后的原因竟然是!
  12. 蚂蚁算法python_Python编程实现蚁群算法详解
  13. ESP UART 介绍
  14. 为什么重大疾病保险最好要选择保障终身?
  15. windows点阵字体转linux版,Deepin 20.1下安装和配置点阵字体,可解决低分屏字体模糊问题...
  16. Markdown文本编辑
  17. 在ASF根据事件(Event)下载SAR数据
  18. 动态生成布局html,HTML5应用开发:神奇的动态布局库isotope教程
  19. 如何使用二维码扫描模组改造通道闸机,实现手机开闸
  20. android家长控制软件,三款家长控制软件,你猜家长更爱谁?

热门文章

  1. 基础版专业版全屏海报图片轮播代码生成器(淘宝店铺特效装修工具软件)
  2. rockchip Android平台动态替换开机logo的实现
  3. 教你图片批量重命名编号,不要括号
  4. GBDT算法(最简单)
  5. linux gcc换成c99标准,关于GCC和C99中可变参数宏
  6. C# 固高运动控制卡插补
  7. 将Linkedin连结到outlook中
  8. 蚂蚁课堂视频笔记+笔记对应源码+思维导图下载地址
  9. CAN详解--各家CAN分析仪与软件的比较
  10. java设计模式-模板方法模式