任务:使用xpath爬取站长的预览图和高清大图
1、引入相关的库
import requests
from lxml import etree
其中requests库与requests库的作用如下:
requests 是一个用于发送HTTP请求的Python库。它提供了简洁且易于使用的API,让你可以轻松地发送各种类型的HTTP请求,并处理响应数据。
lxml 是一个用于处理XML和HTML文档的Python库。它是基于C库 libxml2 和 libxslt 的绑定,提供了高性能和易用的解析、验证、查询、修改以及生成XML和HTML文档的功能。
2、主要是xpath的使用方法
使用xapth需要
respons = requests.get(url, headers=headers).content.decode()
ret = etree.HTML(respons)
其中
ret = etree.HTML(respons)是使用 lxml 库中的 etree 模块创建一个 HTML 解析器对象,并将响应内容 response 作为参数传递给该解析器。 etree.HTML(response) 的作用是将HTML文本解析为一个可操作的树状结构,以方便后续的数据提取和处理。解析后的树状结构可以使用XPath或CSS选择器来定位和提取特定元素、属性或文本内容。
然后是xpath的筛选, dev_list = ret.xpath('/html/body/div[3]/div[2]/div') # html下的body标签下的第三个div标签下的第二个div标签下的第一个div
XPath 是一种用于在 XML 或 HTML 文档中定位节点的语言,它可以通过路径表达式在文档中选择节点或节点集合。在 lxml 库中,可以使用 xpath() 方法来执行 XPath 查询。下面是一些 XPath 的常见用法:
- 选择元素节点:使用元素名称作为路径表达式,例如 //div 会选择文档中所有的 <div> 元素。
- 选择子节点:使用斜杠 / 表示选择子节点,例如 //div/p 会选择文档中所有 <div> 元素下的所有 <p> 元素。
- 选择属性:使用 @ 符号表示选择属性,例如 //div/@class 会选择文档中所有 <div> 元素的 class 属性。
- 条件过滤:使用方括号 [] 构建条件过滤,例如 //div[@class='container'] 会选择 class 属性值为 'container' 的所有 <div> 元素。
- 文本内容选择:使用 text() 函数选择节点的文本内容,例如 //p/text() 会选择文档中所有 <p> 元素的文本内容。
- 包含关系和逻辑运算符:使用 and、or、not 进行多个条件的组合,例如 //div[@class='container' and @id='main']
3、对于保存的后缀名,由于不同的文件后缀名不同,爬取存储时使用同一固定量很难,因此,在爬取时选择筛选出后缀名并命名即可,即
end = big_url.split('.')[-1] #对爬取的文件获取后缀名
4、
with open(f'大照片/{name}.{end}', 'wb') as f:
f.write(download)
print(name + '.' + end)
文件的保存
5、
respons = requests.get(url, headers=headers).content.decode()
在这个代码中.content的作用是什么
.content 是 requests 库中的一个属性,用于获取HTTP响应的二进制内容。在你提供的代码中,.content 被调用以获取HTTP响应的二进制内容。
.content 获取了 HTTP 响应的二进制内容。如果不使用 .content,则只能获取到原始的二进制数据,而无法直接访问和处理其中的文本信息。
如果你不使用 .content 和 .decode(),那么无法直接获取到响应内容的文本数据,而只能处理二进制数据。这在某些情况下可能会导致处理上的困难,因为大部分的文本处理工具和方法都是基于字符串而不是二进制数据的。