爬虫工具
python3 pycharm edge/chrome
requests库的用法
requests库是python中简单易用的HTTP库
用命令行安装第三方库 pip install requests
导入库import requests
获取响应内容
import requests
r = requests.get('http://www.baidu.com/')
print("文本编码:", r.encoding) # ISO-8859-1
print("响应状态码:", r.status_code)
# print ("字符串方式的响应体:", r.text)
# 响应体乱码解决
print("字符串方式的响应体:", r.text.encode('ISO-8859-1'))
xpath的用法
xpath可以在XML文档中查找信息,在XML中通过元素和属性进行定位
常用的表达式
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点 |
/ | 从根节点选取(取子节点)。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点 |
… | 选取当前节点的父节点 |
@ | 选取属性 |
谓语
路径表达式 | |
---|---|
//table/tbody/tr | table标签下的tbody标签下的所有tr节点 |
//a/@src | 选取a标签下的src属性 |
//div[@class=“box”] | 选取class="box"的div节点 |
使用lxml解析
安装pip install lxml
导入库from lxml import etree
lxml
将_html_文本转换为_xml_对象
实例化一个**etree**
对象,且将解析的源码加载到该对象中
tree = etree.HTML(html)
# result = etree.tostring(tree) 补全html的基本写法
# 比如补全缺少的结束标签
xpath中的 text(), string(), data()的区别如下:
text()
仅仅返回所指元素的文本内容string()
函数会得到所指元素的所有节点文本内容,这些文本会被拼接成一个字符串.data()
大多数时候和string()通用不建议经常使用.(可能会影响性能)
基本使用
from lxml import etree
wb_data = """
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
"""
html = etree.HTML(wb_data)
print(html)
result = etree.tostring(html)
print(result.decode("utf-8"))
输出
<Element html at 0x1cf63c799c8>
<html><body><div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class=<