HTMLParser版:
#
!/usr/bin/python
# -*- coding: UTF-8 -*-
import HTMLParser
class UrlParser(HTMLParser.HTMLParser):
def __init__ (self):
HTMLParser.HTMLParser.__init__ (self)
self.urls = []
def handle_starttag(self, tag, attrs):
if tag == ' a ' :
for name,value in attrs:
if name == ' href ' :
self.urls.append(value)
def geturls(self):
return self.urls
if __name__ == ' __main__ ' :
urls = []
url = UrlParser()
url.feed(' 1111111111<a href="http://www.bccn.net">BCCN</a>2222222<a href="http://bbs.bccn.net">BCCN.BBS</a>333333333 ' )
urls += url.geturls()
print urls
# -*- coding: UTF-8 -*-
import HTMLParser
class UrlParser(HTMLParser.HTMLParser):
def __init__ (self):
HTMLParser.HTMLParser.__init__ (self)
self.urls = []
def handle_starttag(self, tag, attrs):
if tag == ' a ' :
for name,value in attrs:
if name == ' href ' :
self.urls.append(value)
def geturls(self):
return self.urls
if __name__ == ' __main__ ' :
urls = []
url = UrlParser()
url.feed(' 1111111111<a href="http://www.bccn.net">BCCN</a>2222222<a href="http://bbs.bccn.net">BCCN.BBS</a>333333333 ' )
urls += url.geturls()
print urls
pyquery版:
#
!/usr/bin/python
# -*- coding: UTF-8 -*-
from pyquery import PyQuery as pq
class UrlParser():
def __init__ (self):
self.urls = []
def feed(self,data):
d = pq(data)
if d.find(' a ' ):
# 关于下面一行,我用d('a').attr('href')只能得到第一个URL,暂时只会用map,不知道有没有别的够pythonic的代码
url = d(' a ' ).map(lambda i, e: pq(e)(' a ' ).attr(' href ' ))
for u in url:
self.urls.append(u)
def geturls(self):
return self.urls
if __name__ == ' __main__ ' :
urls = []
url = UrlParser()
url.feed(' 1111111111<a href="http://www.bccn.net">BCCN</a>2222222<a href="http://bbs.bccn.net">BCCN.BBS</a>333333333 ' )
urls += url.geturls()
print urls
# -*- coding: UTF-8 -*-
from pyquery import PyQuery as pq
class UrlParser():
def __init__ (self):
self.urls = []
def feed(self,data):
d = pq(data)
if d.find(' a ' ):
# 关于下面一行,我用d('a').attr('href')只能得到第一个URL,暂时只会用map,不知道有没有别的够pythonic的代码
url = d(' a ' ).map(lambda i, e: pq(e)(' a ' ).attr(' href ' ))
for u in url:
self.urls.append(u)
def geturls(self):
return self.urls
if __name__ == ' __main__ ' :
urls = []
url = UrlParser()
url.feed(' 1111111111<a href="http://www.bccn.net">BCCN</a>2222222<a href="http://bbs.bccn.net">BCCN.BBS</a>333333333 ' )
urls += url.geturls()
print urls
正则表达式版:
#
!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
class UrlParser():
def __init__ (self):
self.urls = []
def feed(self,data):
url = re.findall(r''' <a(\s*)(.*?)(\s*)href(\s*)=(\s*)([\"\s]*)([^\"\']+?)([\"\s]+)(.*?)> ''' ,data,re.S|re.I)
for u in url:
self.urls.append(u[6])
def geturls(self):
return self.urls
if __name__ == ' __main__ ' :
urls = []
url = UrlParser()
url.feed(' 1111111111<a href="http://www.bccn.net">BCCN</a>2222222<a href="http://bbs.bccn.net">BCCN.BBS</a>333333333 ' )
urls += url.geturls()
print urls
# -*- coding: UTF-8 -*-
import re
class UrlParser():
def __init__ (self):
self.urls = []
def feed(self,data):
url = re.findall(r''' <a(\s*)(.*?)(\s*)href(\s*)=(\s*)([\"\s]*)([^\"\']+?)([\"\s]+)(.*?)> ''' ,data,re.S|re.I)
for u in url:
self.urls.append(u[6])
def geturls(self):
return self.urls
if __name__ == ' __main__ ' :
urls = []
url = UrlParser()
url.feed(' 1111111111<a href="http://www.bccn.net">BCCN</a>2222222<a href="http://bbs.bccn.net">BCCN.BBS</a>333333333 ' )
urls += url.geturls()
print urls
速度比较:正则表达式 > pyquery > HTMLParser
测试的时候遍历大约1000个页面,正则表达式占绝对优势,这3个速度比例大约是 8:2:1
HTMLParser最慢,pyquery速度大约是它的2倍,正则的速度是它的8倍,看来以后如非必要不再考虑HTMLParser了,用起
来也不如pyquery方便,正则速度倒是很快,功能也强大,前两者能提取的内容用正则全部都能实现,而正则能实现的功能前两者就不一定能实现了。只是正
则的可读性不好。以后遇到数据量大的用正则表达式,数据量不大不考虑时间因素但逻辑复杂的的用pyquery,以后维护起来方便
相关推荐
如何在Java程序中利用正则表达式实现对字符串的解析.另外,HTMLParser是一款很强大的对HTML网页进行解析的工具,其中大量地用到正则表达式.
Java正则表达式是编程语言Java中用于处理字符串的强大工具,它允许程序员通过简洁的语法进行复杂的文本匹配、查找、替换和验证。自从Java 1.4引入`java.util.regex`包以来,Java程序员就可以方便地使用正则表达式来...
Java正则表达式是编程语言Java中用于处理字符串的强大工具,尤其在文本处理、数据验证和数据提取等方面具有广泛的应用。正则表达式通过一种特殊的语法来定义模式,可以匹配、查找、替换和验证字符串中的特定序列。在...
正则表达式与HTMLParser是两种在处理文本数据时非常重要的工具。正则表达式(Regular Expression)是一种模式匹配语言,常用于字符串的查找、替换和提取等操作,而HTMLParser则是用来解析HTML文档结构的工具,尤其在...
在IT行业中,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够用来搜索、替换、提取甚至验证字符串中的模式。在C#编程语言中,正则表达式是通过`System.Text.RegularExpressions`命名...
在这个实例中,我们将探讨如何结合C#中的正则表达式(Regular Expressions)和HTMLParser来高效地从网页中抓取所需数据。 首先,让我们了解什么是正则表达式。正则表达式是一种模式匹配工具,用于在字符串中查找、...
通过与HTMLParser结合使用,正则表达式能够高效地从网页中筛选出目标信息。 ### Web信息抽取系统设计 该系统的设计主要包括三个关键模块:URL抽取模块、信息抽取模块(以电子邮件为例)和存储模块。 #### URL抽取...
最后,压缩包中的"test"可能是测试脚本或测试数据,而"需要使用的lib"则表明除了HTMLParser之外,可能还需要其他库,比如`urllib`或`requests`用于发送HTTP请求,`re`进行正则表达式匹配,甚至`pandas`用于数据清洗...
对于网页内容抓取,HTMLParser通常结合正则表达式或者XPath(XML路径语言)来定位目标信息。例如,你可以使用HTMLParser解析整个网页,然后通过XPath找到特定的元素,如所有的链接(`<a>`标签)。这在进行网络爬虫...
3. `EmailExtractor.java`: 使用正则表达式抓取Email的类。 4. `HtmlParser.java`: 可能使用了DOM或Jsoup等库来解析HTML的类。 5. `Utils.java`: 辅助工具类,如URL去重、线程管理等。 通过学习这个实例源码,...
### Python 获取百度热榜链接的实例方法 #### 目标与背景 本文旨在分享如何使用Python编程语言抓取百度热榜中的热门话题及其链接。百度作为中国最大的搜索引擎之一,其热榜反映了当前互联网上的热点话题。对于数据...
在本文中,我们将深入探讨如何使用C#编程语言和HTMLParser库来抓取并解析百度MP3页面中的音频地址。这个过程涉及到网络请求、HTML解析以及数据提取等关键概念。 首先,我们需要理解C#的基本语法和.NET框架。C#是一...
下面是一个使用正则表达式来抽取所有的href链接的示例代码: using System; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace HttpGet { class Class1 { [STAThread] ...
在本场景中,我们讨论如何使用HTMLParser库来创建一个基础的网络爬虫,以便从网页上抓取和分析数据。 首先,我们需要了解HTMLParser的基本用法。HTMLParser设计为易于使用,它提供了对HTML元素、属性和文本的访问,...
>`:这部分则用于匹配XML声明(如`<?xml ... ?>`)和其他可能存在的XML实体,这些通常不包含在页面的可见文本中。 2. **正则表达式编译与匹配**: - `Pattern.compile(regex, Pattern.CASE_INSENSITIVE)`:编译...
本篇将重点讲解如何利用HTMLParser库在Java中抓取网页数据。 HTMLParser是Java的一个开源库,专门用于解析HTML文档,提取其中的数据。它的设计目标是简化HTML解析过程,即使面对不规范的HTML代码也能有效地处理。...
HTMLParser是Python中用于解析HTML文档的一个库,它允许开发者以事件驱动的方式处理HTML文档的结构。这个库特别适用于从不规范的HTML源码中提取数据,因为网页内容的格式可能会因各种原因而不尽完美。在本例中,我们...
HTMLParser是一种用于解析HTML文档的工具或库,它在IT领域中扮演着重要角色,特别是在网页数据抓取、网络爬虫以及信息提取等场景。HTML是超文本标记语言(HyperText Markup Language)的缩写,它是构建网页的基础,...