文档章节

python/java 解析 HTML 网页数据的几种方法简介

大数据之路
 大数据之路
发布于 2012/10/17 02:28
字数 769
阅读 1612
收藏 9

工作中经常与数据打交道,去网上抓取数据也成了家常便饭。以前就准备抽空总结下的。

最近刚好看到 http://segmentfault.com/q/1010000000124036 上这篇文章有人问到了,

而且下面有热心pythoner 已经回答了,特此整理下,以备忘。

问题:现在要抓取一批页面,并将指定标签里面的数据抓取出来,如何做到通用性好,稳定可用?

1、使用第三方库:mechanize

import mechanize
import cookielib
if __name__=='__main__':
    br = mechanize.Browser()
    br.set_cookiejar(cookielib.LWPCookieJar()) # Cookie jar
    
    br.set_handle_equiv(True) # Browser Option
    br.set_handle_gzip(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
    
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
    br.open("http://apple.com")
    print br.title()

输出为Apple

对于mechanize的详细使用,参考 http://my.oschina.net/leejun2005/blog/83451

2、使用第三方库: Beautiful Soup 扩展包来解析

import urllib
from bs4 import BeautifulSoup
content = urllib.urlopen('http://www.apple.com/').read()
soup = BeautifulSoup(content)
print soup.find('title').string

输出为Apple

对于Beautiful Soup的详细使用,参考  http://www.crummy.com/software/BeautifulSoup/bs4/doc/

Python爬虫入门(8):Beautiful Soup的用法  http://python.jobbole.com/81349/

3、使用第三方库: lxml 扩展包来解析

from lxml import html
doc = html.parse('http://www.apple.com/')
title = doc.find('.//title').text
print title

4、可以使用第三方库: pyquery (经常与 lxml 结合使用)

from pyquery import PyQuery as pq
d = pq(url='http://apple.com')
print 'Title: ', d('title').text()

5、直接使用正则来解析:

import urllib
import re
url='http://apple.com'
html = urllib.urlopen(url).read()
m = re.findall(r"<title>(.*)</title>", html)
print m[0]

输出为Apple

有关python正则的使用请见《Python正则表达式操作指南》 

http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97

注:

以上几种方法中,推荐优先使用前 4 种,或者有其它优秀的第三方库你也可以尝试。

之所以不推荐最后的正则解析原因有2:

(1)HTML存在一些标签不规范的场景,如<p>, <BR>, 等可以单独出现,不用配对出现,

你可以简单的认为他的语法非常灵活,不像 xml 那样限制的很严格,之所以浏览器能解析是因为

浏览器背后做了许多不为人知的解析工作,如果你要用正则来做,你也需要考虑很多情况,

而且通用性也会大打折扣。这也是建议你选择第三方库的主要原因。

(2)直接用正则这么解析,在面对复杂的抓取的时候,正则的性能会是严重的瓶颈。

REF:

Python网页解析:BeautifulSoup vs lxml.html

http://my.oschina.net/apoptosis/blog/118647

6、在 java 中你可以使用 jsoup 来方便的解析 html 标签:

使用 jsoup 对 HTML 文档进行解析和操作

http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/

http://jsoup.org/cookbook/extracting-data/example-list-links

https://github.com/code4craft/jsoup-learning    jsoup-learning

 public static void parseHtmlTag(String html) throws IOException {
		// Document doc = Jsoup.parse(html);
		Document doc = Jsoup.connect("http://www.hao123.com").get();
		Elements links = doc.select("a[href]");
		for (Element link : links) {
			System.out.println(link.attr("abs:href") + "\t" + link.text());
		}
	}
http://www.hao123.com#	不再提醒
http://go.client.baidu.com/?linkid=211	
http://www.hao123.com	设为主页
http://www.hao123.com/redian/tongzhi.htm	主页修复
...


本文转载自:http://segmentfault.com/q/1010000000124036

共有 人打赏支持
大数据之路
粉丝 1543
博文 516
码字总数 343694
作品 0
武汉
架构师
私信 提问
PyPy 简介

概述 Python 编程语言于 1994 年问世,自新千年以来,这种语言获得了极大的成功。衡量一种语言成功与否的标准之一就是其实现的数量。最知名也是最常用的 Python 实现称为 CPython。此外还有其...

IBMdW
2012/04/09
4.2K
0
SeimiCrawler v0.2.6 发布,Java 爬虫框架

特别介绍 2016.01.05:专门为SeimiCrawler工程打包部署的maven-seimicrawler-plugin已经发布可用,详细请继续参阅maven-seimicrawler-plugin或是详细文档中"工程化打包部署章"节。 Change l...

无极小子
2016/01/09
854
3
SeimiCrawler V1.0.0 发布,Java 爬虫框架

SeimiCrawler V1.0.0发布了,更新如下: http请求处理器重构,并默认改由okhttp3实现,且支持通过@Crawler注解中的httpType自由切换为apache httpclient 部分代码优化 支持通过seimiAgent获取...

无极小子
2016/06/29
1K
1
SeimiCrawler v0.3.2 发布,Java爬虫框架

SeimiCrawler v0.3.2 发布了。更新如下: v0.3.2 化分布式模式下与redis的连接,增强分布式可靠性 bug fix v0.3.0 内置支持SeimiAgent,完美解决动态页面渲染抓取问题 修复自动跳转在某些情况...

无极小子
2016/05/18
1K
1
python解析器--版本--IDE环境

-- --python 版本---解析器---------------------------------------------------------------------------- -- --5-----------Python 工具-------------数据专家必知必会的 7 款 Python 工具......

liapple6
10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我的Linux系统九阴真经

在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公...

linux-tao
23分钟前
3
0
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file

前段时间打包了一个数据库镜像,但是启动容器之后发现报错 ··· ··· MySQL: Starting MySQL….. ERROR! The server quit without updating PID file 查了网络上的解决方案比较全,遂转帖...

blackfoxya
24分钟前
1
0
C4C销售订单行项目价格维护方法

需求很简单,能够创建销售订单,在行项目里添加产品,带出价格来,同时把总价显示在销售订单抬头区域。 如下图所示: 下面是具体配置。 Business Configuration里,点击Sales Order的配置: ...

JerryWang_SAP
今天
12
0
deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
今天
11
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
254
5

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部