网站优化就是seo,线上做笔记的网站,小程序设计,电商网站建设的现实意义是什么xpath#xff1a;https://blog.csdn.net/randy521520/article/details/132432903
一、安装
XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言#xff0c;可用来在 HTML\XML 文档中对元素和属性进行遍历。
pip install lxml二、使用案例
from lxml impo…xpathhttps://blog.csdn.net/randy521520/article/details/132432903
一、安装
XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言可用来在 HTML\XML 文档中对元素和属性进行遍历。
pip install lxml二、使用案例
from lxml import etree
import requests
import asyncio
import functools
import re
import jsonhouse_info []异步请求获取链家每页数据
async def get_page(page_index):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36}request functools.partial(requests.get, fhttps://sh.lianjia.com/ershoufang/pudong/pg{page_index}/,headersheaders)loop asyncio.get_running_loop()response await loop.run_in_executor(None, request)return response使用xpath获取房屋信息
def get_house_info(html):title_list html.xpath(//a[data-elershoufang]/text()) # 房屋titlehouse_pattern_list html.xpath(//div[classhouseInfo]/text()) # 房屋格局price_list html.xpath(//div[classunitPrice]/span/text()) # 房屋单价location_list html.xpath(//div[classpositionInfo]) # 房屋位置信息total_list html.xpath(//div[contains(class,totalPrice)]) # 总价for index, item in enumerate(zip(title_list, house_pattern_list, price_list)):location_item location_list[index]total_item total_list[index]house_info.append({title: item[0],house_pattern: item[1],price: item[2],location: location_item.xpath(./a[1]/text())[0] location_item.xpath(./a[last()]/text())[0],total: total_item.xpath(./span/text())[0] total_item.xpath(./i[last()]/text())[0]})异步获取第一页数据拿到第一页房屋信息并返回分页总数和当前页
async def get_first_page():response await get_page(1)#etree.HTML 将获取到的html字符串转为可操作的Element对象get_house_info(etree.HTML(response.text))if __name__ __main__:asyncio.run(get_first_page())三、etree 模块
etree.Element(element_name, attribNone, nsmapNone) 创建element对象from lxml import etreeelement_name要创建的元素的名称
attrib元素的属性字典
nsmap命名空间映射字典用于指定元素的命名空间element etree.Element(div,attrib{class:test},nsmap{ns: http://example.com/ns})etree.SubElement(parent, element_name, attribNone, nsmapNone) 创建子元素from lxml import etreeparentelement对象
element_name要创建的元素的名称
attrib元素的属性字典
nsmap命名空间映射字典用于指定元素的命名空间element etree.Element(div, attrib{class: test}, nsmap{ns: http://example.com/ns})
span_element etree.SubElement(element,span)
span_element.text 我是span
print(element.xpath(//div/span/text()))etree.fromstring(text, parserNone,base_urlNone) 将XML、HTML字符串解析为Element对象from lxml import etree
text解析的XML字符串
parse解析器对象默认lxml.etree.XMLParser、lxml.etree.HTMLParser
base_url: 基本URL用于解析相对URL。如果HTML文档中包含相对URL解析器将使用base_url来将其转换为绝对URL。如果未提供base_url则相对URL将保持不变html_str div classtestspan我是span/span/div
element etree.fromstring(html_str)
print(element.xpath(//div/span/text()))etree.HTML(text, parserNone, base_urlNone) 将HTML字符串解析为Element对象from lxml import etree
xml_string解析的XML字符串
parse解析器对象默认lxml.etree.HTMLParser
base_url: 基本URL用于解析相对URL。如果HTML文档中包含相对URL解析器将使用base_url来将其转换为绝对URL。如果未提供base_url则相对URL将保持不变html_str div classtestspan我是span/span/div
element etree.HTML(html_str)
print(element.xpath(//div/span/text()))etree.XML(text, parserNone, base_urlNone) 将XML字符串解析为Element对象from lxml import etree
text解析的XML字符串
parse解析器对象默认lxml.etree.XMLParser
base_url: 基本URL用于解析相对URL。如果HTML文档中包含相对URL解析器将使用base_url来将其转换为绝对URL。如果未提供base_url则相对URL将保持不变html_str div classtestspan我是span/span/div
element etree.XML(html_str)
print(element.xpath(//div/span/text()))etree.parse(source, parserNone, base_urlNone) 将XML、HTML字符串解析为ElementTree对象
四、element 对象
element.xpath(path) 执行xpath语法element.nsmap获取或设置元素命名空间映射element.attrib获取或设置元素属性element.text获取或设置文本element.tag返回对象名称element.append(element) 向节点里面追加子节点element.insert(index,element) 向节点开始的某个位置添加子节点from lxml import etreeelement etree.Element(div, attrib{class: test})
span_element etree.SubElement(element, span)
span_element.text 我是spanappend_child etree.Element(div, attrib{class: append})
append_child.text 我是append_childinsert_child etree.Element(div, attrib{class: insert})
insert_child.text 我是insert_childelement.append(append_child)
element.insert(0,insert_child)
print(element.xpath(//div/span/text()))
print(element.xpath(//div/div[classappend]/text()))
print(element.xpath(//div/div[classinsert]/text()))element.find(xpath): 在元素的子树中查找与XPath表达式匹配的第一个元素并返回该元素。如果找不到匹配的元素则返回Noneelement.findall(xpath): 在元素的子树中查找与XPath表达式匹配的所有元素并返回一个列表element.get(attribute_name, defaultNone): 获取元素的指定属性的值element.set(attribute_name, value): 设置元素的指定属性的值element.iter(tagNone): 迭代元素及其子元素可选择指定标签进行过滤element.getparent(): 获取元素的父元素element.getchildren(): 获取元素的所有子元素element.getroottree(): 获取包含元素的根元素的Tree对象
五、elementTree 对象
elementTree.root: 根元素的Element对象。可以通过访问tree.root来获取根元素。elementTree.getroot(): 获取根元素的Element对象。与tree.root属性相同用于获取根元素elementTree.find(path): 在整个文档中查找具有指定路径的第一个元素并返回该元素的Element对象。路径可以使用XPath表达式指定elementTree.findall(path): 在整个文档中查找具有指定路径的所有元素并返回这些元素的列表。路径可以使用XPath表达式指定elementTree.iterfind(path): 在整个文档中迭代查找具有指定路径的元素并返回这些元素的迭代器。路径可以使用XPath表达式指定elementTree.write(file, encodingNone, xml_declarationNone, pretty_printFalse): 将整个文档写入文件。file参数可以是文件名或文件对象。encoding参数指定写入文件时使用的字符编码。xml_declaration参数指定是否写入XML声明。pretty_print参数指定是否以更易读的格式写入文档elementTree.tostring(element, encodingNone, method“xml”, pretty_printFalse): 将指定元素及其子元素序列化为字符串。element参数是要序列化的元素。encoding参数指定字符串的字符编码。method参数指定序列化的方法可以是xml默认或html。pretty_print参数指定是否以更易读的格式序列化。elementTree.parse(source, parserNone, base_urlNone): 静态方法用于解析XML或HTML文档并返回一个ElementTree对象。与etree.parse函数的用法相同
六、parse 解析器对象
lxml.etree.XMLParser: 用于解析XML文档的默认解析器。它支持标准的XML解析并提供了丰富的功能和选项如命名空间支持、DTD验证等。lxml.etree.HTMLParser: 用于解析HTML文档的默认解析器。它专门针对HTML进行了优化并具有处理HTML特性的功能如自动修复破碎的标签、处理实体引用等。lxml.etree.XMLPullParser: 一种事件驱动的解析器用于逐行解析XML文档。它提供了一个迭代器接口可以逐行读取和处理XML文档。lxml.etree.HTMLPullParser: 一种事件驱动的解析器用于逐行解析HTML文档。它提供了一个迭代器接口可以逐行读取和处理HTML文档。