1. 导入必要的模块:
- `urllib.request`:用于发送HTTP请求和获取响应。
- `urllib.parse`:用于解析URL。
- `lxml.etree`:用于解析HTML内容。
2. 创建一个`create_request`函数
该函数接受一个参数`page`表示页面编号。根据`page`的值,构造相应的URL,并设置请求头信息。
3. 创建一个`get_content`函数
该函数接受一个参数`request`表示HTTP请求对象。使用`urllib.request.urlopen`发送请求并获取响应。将响应内容以UTF-8编码解码,并返回结果。
4. 创建一个`download`函数
该函数接受一个参数`content`表示网页内容。使用`lxml.etree.HTML`方法解析内容为树形结构。使用XPath表达式提取图片名称和图片链接,并循环下载图片。
5. 创建`if __name__ == '__main__':`
首先读取用户输入的开始页和结束页。然后,使用循环遍历每一页的页面编号,并依次执行以下步骤:
- 调用`create_request`函数创建请求对象。
- 调用`get_content`函数获取网页内容。
- 调用`download`函数下载图片。
注意,代码中的`urllib.request.urlretrieve`方法用于下载图片,需要提前创建文件夹,将图片保存到指定路径。
源码
import urllib.request
import urllib.parse
from lxml import etree
#第一页 https://sc.chinaz.com/tupian/index.html
#第二页 https://sc.chinaz.com/tupian/index_2.html
def create_request(page):
# 判断是否为第一页
if page == 1:
url = 'https://sc.chinaz.com/tupian/index.html'
else:
url = 'https://sc.chinaz.com/tupian/index_'+str(page)+'.html'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
request = urllib.request.Request(url=url,headers=headers)
return request
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
# print(content)
return content
def download(content):
# 解析获取的html代码
tree = etree.HTML(content)
name_list = tree.xpath('//div[@class="item"]/img/@alt')
# # 测试获取的数据
# for n in name_list:
# print(n)
img_list = tree.xpath('//@data-original')
# for m in img_list:
# print(m)
# 拼接保存的url,文件名
for i in range(len(name_list)):
name = name_list[i]
src = img_list[i]
url = 'https:'+src
urllib.request.urlretrieve(url=url,filename='./img/'+name+'.jpg')
if __name__ == '__main__':
start_page = int(input('请输入开始页'))
end_page = int(input('请输入结束页'))
for page in range(start_page,end_page+1):
request = create_request(page)
content = get_content(request)
download(content)