1、导包
import requests | |
from lxml import etree | |
import os |
2、定义一个用于网络请求的 URL 和 headers
设置 'User-Agent' 是为了模拟浏览器行为,避免因为服务器有防爬策略而被拒绝访问。
url = 'http://pic.netbian.com/4kdongman/' | |
headers = {'User-Agent': | |
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'} |
3、定义一个获取壁纸的函数 get_img
get_img
函数接收一个参数 img_url
,这个参数应该是一个图片的 URL。然后,函数使用 requests.get
方法获取 URL 对应的网页内容,其中 headers
参数用于设置 HTTP 请求头,模拟浏览器行为。获取到的网页内容通过 decode('gbk')
解码为字符串,然后使用 etree.HTML
将其解析为一个 HTML 对象。
接下来,使用 xpath
方法从 HTML 对象中提取出所有满足条件的图片链接,条件是图片属于 ID 为 "main" 的 div 下的 class 为 "slist" 的 div 下的 ul 下的 li 下的 a 下的 img,并且提取的是 src
属性的值。提取到的图片链接存储在 img_path
列表中。
遍历 img_path
列表中的每个图片链接,将其拼接为完整的 URL,然后调用 download
函数下载图片。
def get_img(img_url): | |
response = requests.get(url=img_url, headers=headers) | |
html = response.content.decode('gbk') | |
tree = etree.HTML(html) | |
img_path=tree.xpath('//div[@id="main"]/div[@class="slist"]/ul/li/a/img/@src') | |
cout=1 | |
for img in img_path: | |
img ='http://pic.netbian.com' + img | |
download(img,cout) | |
cout+=1 | |
def download(img,cout): | |
response = requests.get(url=img, headers=headers) | |
pic=response.content | |
try: | |
with open('{}.jpg'.format(cout), 'wb') as f: | |
f.write(pic) | |
print('{}.jpg-----下载成功'.format(cout)) | |
except: | |
print('下载失败!') |
4 、定义了一个名为 main
的函数,该函数首先通过 requests.get
方法获取一个网页的内容,然后使用 etree.HTML
将网页内容解析为一个 HTML 对象。然后,使用 xpath
方法从 HTML 对象中提取出壁纸页数。
def main(): | |
# 启始 url | |
url = 'http://pic.netbian.com/4kdongman/' | |
req = requests.get(url, headers=headers) | |
html = req.content.decode('gbk') | |
# print(html) | |
tree = etree.HTML(html) | |
# 提取壁纸页数 | |
num = tree.xpath('//div[@class="page"]/a[last() - 1]/text()')[0] | |
for i in range(int(num)): | |
# 创建目录用于下载 | |
path = 'C:\\Users\\86198\\Pictures\\Camera Roll\\第{}页\\'.format(i + 1) | |
if not os.path.exists(path): | |
os.makedirs(path) | |
# 改变当前工作目录 | |
os.chdir(path) | |
print('----------第{}页---------正在下载-----'.format(i + 1)) | |
img_url = url + 'index_{}.html'.format(i + 1) | |
if i == 0: | |
img_url = url | |
# print(img_url) | |
# 获取图片链接 | |
get_img(img_url) | |
if __name__ == '__main__': | |
main() |
5、完整代码
import requests | |
from lxml import etree | |
import os | |
url = 'http://pic.netbian.com/4kdongman/' | |
headers = {'User-Agent': | |
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'} | |
def get_img(img_url): | |
response = requests.get(url=img_url, headers=headers) | |
html = response.content.decode('gbk') | |
tree = etree.HTML(html) | |
img_path=tree.xpath('//div[@id="main"]/div[@class="slist"]/ul/li/a/img/@src') | |
cout=1 | |
for img in img_path: | |
img ='http://pic.netbian.com' + img | |
download(img,cout) | |
cout+=1 | |
def download(img,cout): | |
response = requests.get(url=img, headers=headers) | |
pic=response.content | |
try: | |
with open('{}.jpg'.format(cout), 'wb') as f: | |
f.write(pic) | |
print('{}.jpg-----下载成功'.format(cout)) | |
except: | |
print('下载失败!') | |
def main(): | |
# 启始 url | |
url = 'http://pic.netbian.com/4kdongman/' | |
req = requests.get(url, headers=headers) | |
html = req.content.decode('gbk') | |
# print(html) | |
tree = etree.HTML(html) | |
# 提取壁纸页数 | |
num = tree.xpath('//div[@class="page"]/a[last() - 1]/text()')[0] | |
for i in range(int(num)): | |
# 创建目录用于下载 | |
path = 'C:\\Users\\86198\\Pictures\\Camera Roll\\第{}页\\'.format(i + 1) | |
if not os.path.exists(path): | |
os.makedirs(path) | |
# 改变当前工作目录 | |
os.chdir(path) | |
print('----------第{}页---------正在下载-----'.format(i + 1)) | |
img_url = url + 'index_{}.html'.format(i + 1) | |
if i == 0: | |
img_url = url | |
# print(img_url) | |
# 获取图片链接 | |
get_img(img_url) | |
if __name__ == '__main__': | |
main() |