前言
爬取网络上的图片是一种常见的需求,它可以帮助我们批量下载大量图片并进行后续处理。本文将介绍如何使用 Python 编写一个简单的爬虫,从指定网页中获取女神图片,并保存到本地。
运行结果
部分图片
1. 引入所需库
首先需要导入两个库:requests
用于发送网络请求,lxml
用于解析和提取数据。
import requests
from lxml import etree
2. 发送请求获取网页内容
使用 requests.get()
方法发送一个 GET 请求到指定的 URL,并设置了请求头中的 User-Agent
,以模拟浏览器发送请求。然后,我们将响应结果的编码设置为 GBK,通过 resp.encoding = 'gbk'
来告诉软件要用中文显示。最后,将获取到的网页内容打印出来。
url = 'http://www.netbian.com/mei/'
resp = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
resp.encoding = 'gbk'
print(resp.text)
3. 解析网页内容并提取图片地址和名称
使用 etree.HTML()
方法将网页内容转换成 XPath 可解析的对象。然后,使用 XPath 表达式提取所有图片的 URL 和名称,并将结果存储在 img_urls
和 img_names
列表中。
xp = etree.HTML(resp.text)
img_urls = xp.xpath('//ul/li/a/img/@src')
img_names = xp.xpath('//ul/li/a/img/@alt')
4. 下载并保存图片
使用 zip()
函数将每个图片的 URL 和名称配对,并进行迭代。在迭代过程中,我们发送一个 GET 请求到图片的 URL,并将响应内容保存为图片文件。这里使用了 with open
语句来自动关闭文件。最后,我们将图片保存在 ./图片合成/img_f/
目录下以图片名称命名。
for u, n in zip(img_urls, img_names):
print(f'正在下载: 图片名:{n}')
img_resp = requests.get(u, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
with open(f'./图片合成/img_f/{n}.jpg', 'wb') as f:
f.write(img_resp.content)
完整代码
# 地址
url = 'http://www.netbian.com/mei/'
import requests
from lxml import etree
# 发送请求获取网页内容
resp = requests.get(url,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
resp.encoding = 'gbk' # 告诉软件,要用中文给我显示
print(resp.text) # 打印文本结果
# 使用lxml解析HTML内容
xp = etree.HTML(resp.text)
# 提取图片URL和名称
img_urls = xp.xpath('//ul/li/a/img/@src')
img_names = xp.xpath('//ul/li/a/img/@alt')
# 遍历图片URL和名称,并下载保存到本地
for u, n in zip(img_urls, img_names):
print(f'正在下载:图片名:{n}')
img_resp = requests.get(u, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
with open(f'./图片合成/img_f/{n}.jpg', 'wb') as f:
f.write(img_resp.content)
关键代码讲解
# 地址
url = 'http://www.netbian.com/mei/'
这里定义了要爬取的网页地址。
import requests
from lxml import etree
导入所需的库:requests
用于发送网络请求,lxml
用于解析和提取数据。
resp = requests.get(url,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
resp.encoding = 'gbk' # 告诉软件,要用中文给我显示
print(resp.text) # 打印文本结果
通过发送 GET 请求获取指定网页的内容,并指定请求头中的
User-Agent
为浏览器的标识,以模拟浏览器访问。使用resp.encoding
设置编码为 GBK,以便正确显示中文字符。最后打印响应结果的文本内容。
xp = etree.HTML(resp.text)
使用 lxml
库的 etree.HTML
方法将网页内容转换为可解析的对象。
img_urls = xp.xpath('//ul/li/a/img/@src')
img_names = xp.xpath('//ul/li/a/img/@alt')
使用 XPath 表达式提取图片的 URL 和名称。xpath
函数返回一个列表,其中的元素是按照表达式提取的结果。
for u,n in zip(img_urls,img_names):
print(f'正在下载: 图片名:{n}')
img_resp = requests.get(u,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
with open(f'./图片合成/img_f/{n}.jpg','wb') as f:
f.write(img_resp.content)
通过迭代 img_urls
和 img_names
列表,使用 zip
函数将图片的 URL 和名称配对。在迭代的过程中,发送 GET 请求获取图片的响应内容。然后使用 with open
语句打开文件,并将图片内容写入文件中,保存到本地。这里使用了 wb
模式以二进制方式写入文件。
注意:在运行代码之前需要创建一个名为
图片合成/img_f
的文件夹,用于保存下载的图片。
关键点讲解说明:
- 爬虫是一种自动化获取网页内容的技术,可以用于从指定网页上获取数据。
- 通过发送 HTTP 请求,可以获取网页的 HTML 内容。
- 使用
requests
库可以方便地发送请求并获取响应。 - 使用 XPath 表达式可以方便地从 HTML 中提取所需的数据。
- 在爬虫过程中,需要模拟浏览器访问,以防止被网站阻止或误判为恶意行为。
- 下载文件时,可以使用
requests
库的get
方法获取文件的内容,并使用open
函数将内容写入文件。
结束语
标签:img,Python,resp,爬虫,537.36,小白必,requests,xp,图片 From: https://blog.51cto.com/u_14522592/7918885本文介绍了如何使用 Python 编写一个简单的爬虫,从指定网页中获取女神图片,并保存到本地。通过学习本文,你可以了解基本的网络请求和数据提取技巧,为你未来的爬虫项目打下基础。当使用爬虫进行图片下载时,请确保遵守相关法律法规和网站的使用规定,尊重他人的版权和隐私。同时,注意合理使用爬虫,避免给目标网站和服务器造成过大负担。谨慎、高效地开展爬虫工作,更好地应用于实际开发中。