Python爬虫开发,python怎么爬虫
1.可扩展置标语言
虽然XML比JSON复杂,在Web中的使用也没有以前多了,但是在很多地方还是会用到,所以要知道如何操作XML。
DOM SAX有两种方法来操作XML: DOM和SAX。DOM会把整个XML读入内存,解析成一棵树,所以占用内存多,解析慢。优点是可以任意遍历树的节点。SAX是一种流模式,可以同时读取和解析。占用内存少,解析快。缺点是我们需要自己处理事件。
正常情况下,首选SAX,因为DOM占用内存太多。
用Python中的SAX解析xml非常简洁。通常我们关心的事件是start_element、end_element和char_data。准备好这三个函数,然后就可以解析XML了。
例如,当SAX解析器读取一个节点时:
Python将生成3个事件:
Start_element事件,当读取一个href=/;Char_data事件,读取python时;End_element事件,当读取/a时,试验代码:
从xml.parsers.expat导入ParserCreate
类DefaultSaxHandler(对象):
def start_element(自身,名称,属性):
print(sax:start_element: %s,attrs: %s % (name,str(attrs)))
def end_element(自身,名称):
print( sax:end _ element:% s % name
def char_data(self,text):
print(sax:char_data: %s % text
xml=r
计算机编程语言
红宝石
handler=DefaultSaxHandler()
parser=ParserCreate()
解析器。StartElementHandler=handler . start _ element
解析器。EndElementHandler=handler . end _ element
解析器。CharacterDataHandler=handler . char _ data
解析器。Parse(xml)需要注意的是,读取大字符串时,可能会多次调用CharacterDataHandler,所以需要自己保存并在EndElementHandler中合并。
除了解析XML,如何生成XML?在99%的情况下,需要生成的XML结构非常简单。因此,生成XML最简单、最有效的方法是拼接字符串:
L=[]
L.append(r )
L.append(r )
L.append(编码(一些数据))
L.append(r )
返回“”。join(L)如果想生成复杂的XML怎么办?建议你用JSON代替XML。
解析XML时,注意找出自己感兴趣的节点,响应事件时,保存节点数据。解析后,可以处理数据。
2.解析器
如果我们要写一个搜索引擎,第一步是用爬虫抓取目标网站的页面,第二步是解析HTML页面,看里面的内容是新闻、图片还是视频。
假设第一步已经完成,第二步应该如何解析HTML?
HTML本质上是XML的子集,但是它的语法没有XML严格,所以它不能被标准的DOM或SAX解析。
幸运的是,Python提供了HTMLParser来非常方便地解析HTML,只需要几行简单的代码:
从html.parser导入HTMLParser
从html.entities导入名称2代码点
类MyHTMLParser(HTMLParser):
def handle_starttag(self,tag,attrs):
打印( %s %标签)
def handle_endtag(self,tag):
打印( %标签)
def handle_startendtag(self,tag,attrs):
打印( %s/ %标签)
def handle_data(self,data):
打印(数据)
def handle_comment(自身,数据):
打印()
def handle_entityref(self,name):
打印( % name)
def handle_charref(self,name):
打印( # % s;% name)
parser=MyHTMLParser()
parser.feed( 一些Some html教程.
结束
)feed()方法可以多次调用,也就是说,整个HTML字符串可能不是一次塞进去的,而是一部分一部分塞进去的。
特殊字符有两种,一种是英文表达nbsp,一个是数字# 1234;两者都可以被解析器解析。
使用HTMLParser,您可以解析文本、图像等。在网页中。
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。