1. HTML结构解析器
1.1. Xpath
官方而言,Xpath是一种能够在XML树状结构中查找节点的技术。在处理网页时,对于那些结构较为清晰的网页,我们通常会选择使用Xpath进行解析。
1.2. 简单示例
下面是一个简单的例子,展示如何使用Xpath从HTML文档中获取数据:
from lxml import etree
html = """
<div>
<l>
<liclass="item-">
<ahref="link1.html">firstitem</a>
</li>
<liclass="item-1">
<ahref="link2.html">seconditem</a>
</li>
<liclass="item-inactive">
<ahref="link3.html">thirditem</a>
</li>
<liclass="item-1">
<ahref="link4.html">forthitem</a>
</li>
<liclass="item-">
<ahref="link5.html">fifthitem</a>
</li>
</l>
</div>
"""
element = etree.HTML(html)
links = element.xpath('//l/li/a/@href')
titles = element.xpath('//l/li/a/text()')
print(links) # ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
print(titles) # ['firstitem', 'seconditem', 'thirditem', 'forthitem', 'fifthitem']
2. BeautifulSoup解析
2.1. 原理及特点
BS4(BeautifulSoup)也是一种常用的解析方式,其原理与Xpath相似。相较于Xpath,BS4只需要记住一些方法即可。
2.2. 安装及使用
你可以通过以下命令安装BS4:
pip install lxml
pip install bs4
这里需要指出的是,BS4依赖于lxml库,因此需要首先安装lxml。详细的使用方法可以参考中文文档:https://www.beautifulsoup.org/zh_CN/v4.4.0/
2.3. 简单示例
下面是一个简单的例子:
from bs4 import BeautifulSoup
html = """
<div id="container">
<div class="boxpicblockcol"></div>
</div>
"""
soup = BeautifulSoup(html, 'lxml')
element = soup.find('div', {'id': 'container'}) # 获取指定id的标签
list_elements = element.find_all('div', {'class': 'boxpicblockcol'}) # 获取指定class的标签
print(element)
print(list_elements)
3. 使用requests保存图片
3.1. 示例
以下是一个使用requests库获取网页内容的示例:
import requests
url = '需要访问的网页地址'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
}
req = requests.Request(url, headers=headers)
response = requests.get(req)
html = response.read().decode('utf-8')
print(html)
3.2. 保存图片
以下是一个使用requests库获取并保存图片的示例:
from urllib import request
url = '一个图片地址'
filename = 'xxx.jpg'
with open(filename, 'wb') as f:
f.write(request.urlopen(url).read())