page = urllib2.urlopen(url)
contents = page.read()
#获得了整个网页的内容也就是源代码 print(contents)
url代表网址,contents代表网址所对应的源代码,urllib2是需要用到的包,以上三句代码就能获得网页的整个源代码
2 获取网页中想要的内容(先要获得网页源代码,再分析网页源代码,找所对应的标签,然后提取出标签中的内容)
python提取html内容的方法。如下参考:
1.首先,打开Python来定义字符串,在定义的字符串后面加上中括号,然后在要提取的字符位置输入zhidao。
2.点击运行程序,可以看到系统打印出的第一个字符在我们定义的字符串中,因为字符串是空格,空格占据了位置。
3.这里可以看到字符显示在程序运行界面的底部,根据我们指定的内容输出,这里写的版本是0输出的第一个字符。
4.还可以一次打印多个字符。如图所示,用冒号分隔字符串的开头,并将其写入方括号中以显示多个字符。
5.这里的输入位置是0到5,你可以发现,与我们的字符串内容相比,字符的相应位置被打印出来,而字符的另一个位置则完全不显示。
6.如果字符串比较大,大于内容的权重,从下面的数字比较方便,也可以直接输出倒数的字符。
7.这时直接用负号来表示这是倒数的位置,它使用起来也特别方便。
HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索。对于初学者还是要费一些功夫的,而一旦上手以后,会发现HTMLParser的结构设计很巧妙,非常实用,基本各种需求都可以满足。比如问题中提到的提取网页文本信息。用以下代码来实现提取网页文本信息
// 提取网页主要文本内容
public String getContent(){
content=(isHub())?getHubEntries():getTopicBlock()
System.out.println("<Content>:")
System.out.println("=========================")
System.out.println(content)
return content
}
// 提取Hub类网页文本内容,如yahoo,sina等门户网
public String getHubEntries(){
StringBean bean=new StringBean()
bean.setLinks(false)
bean.setReplaceNonBreakingSpaces(true)
bean.setCollapse(true)
try {
parser.visitAllNodesWith(bean)
} catch (ParserException e) {
System.err.println("getHubEntries()-->"+e)
}
parser.reset()
return bean.getStrings()
}
// 获取主题性(Topical)网页文本内容:对于博客等以文字为主体的网页效果较好
public String getTopicBlock(){
HasParentFilter acceptedFilter=new HasParentFilter(new TagNameFilter("p"))
NodeList nodes=null
try {
nodes=parser.extractAllNodesThatMatch(acceptedFilter)
} catch (ParserException e) {
System.err.println("getTopicBlock"+e)
}
StringBuffer sb=new StringBuffer()
SimpleNodeIterator iter=nodes.elements()
while(iter.hasMoreNodes()){
Node node=iter.nextNode()
sb.append(node.getText()+"\n")
}
parser.reset()
return sb.toString()
}
另外,要知道的是
HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作。这个类有下面几个构造函数:
public Parser ()
public Parser (Lexer lexer, ParserFeedback fb)
public Parser (URLConnection connection, ParserFeedback fb) throws ParserException
public Parser (String resource, ParserFeedback feedback) throws ParserException
public Parser (String resource) throws ParserException
public Parser (Lexer lexer)
public Parser (URLConnection connection) throws ParserException
和一个静态类public static Parser createParser (String html, String charset)
提供几个常用的
对于树型结构进行遍历的函数,这些函数最容易理解:
Node getParent ():取得父节点
NodeList getChildren ():取得子节点的列表
Node getFirstChild ():取得第一个子节点
Node getLastChild ():取得最后一个子节点
Node getPreviousSibling ():取得前一个兄弟(不好意思,英文是兄弟姐妹,直译太麻烦而且不符合习惯,对不起女同胞了)
Node getNextSibling ():取得下一个兄弟节点
取得Node内容的函数:
String getText ():取得文本
String toPlainTextString():取得纯文本信息。
String toHtml () :取得HTML信息(原始HTML)
String toHtml (boolean verbatim):取得HTML信息(原始HTML)
String toString ():取得字符串信息(原始HTML)
Page getPage ():取得这个Node对应的Page对象
int getStartPosition ():取得这个Node在HTML页面中的起始位置
int getEndPosition ():取得这个Node在HTML页面中的结束位置
用于Filter过滤的函数:
void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
用于Visitor遍历的函数:
void accept (NodeVisitor visitor):对这个Node应用visitor
用于修改内容的函数,这类用得比较少:
void setPage (Page page):设置这个Node对应的Page对象
void setText (String text):设置文本
void setChildren (NodeList children):设置子节点列表
其他函数:
void doSemanticAction ():执行这个Node对应的 *** 作(只有少数Tag有对应的 *** 作)
Object clone ():接口Clone的抽象函数。
以上知识可以完整处理HTML页面的所有内容
参考资料:
htmlparser官方网站下载地址
http://www.htmlparser.sourceforge.net/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)