接下来我将为您详细讲解“Python爬取网页中的图片(搜狗图片)详解”的完整攻略。
标题
1. 确定爬取目标
要爬取搜狗图片,我们需要先确定要爬取的页面以及其中的图片。在本例中,我们将使用如下链接作为目标:
https://pic.sogou.com/pics?query=%E7%BE%8E%E5%A5%B3%E5%9B%BE%E7%89%87
此链接指向一个以“美女图片”为关键字的图片搜索结果页面。
2. 安装必要的库
在代码实现之前,需要先安装如下几个Python库:
pip install requests
pip install beautifulsoup4
pip install lxml
其中,requests
用于向指定网站发送请求,beautifulsoup4
用于解析HTML页面,lxml
作为beautifulsoup4
的解析器,用于解析HTML页面中的节点,获取其中的图片链接。
3. 获取图片链接
获取图片链接的过程需要经过以下几个步骤:
(1)向指定网站发送请求
import requests
url = 'https://pic.sogou.com/pics'
params = {
'query': '美女图片',
'mode': 1,
'start': 48,
'reqType': 'ajax',
'tn': 0,
'reqFrom': 'result'
}
response = requests.get(url, params=params)
response.encoding = 'utf-8'
我们使用requests
库构造了一个GET请求,其中要发送的参数包括查询关键字、搜索模式、起始搜索位置、请求类型、以及请求来源等内容。获取到的搜索结果将会被放入response
对象中。
(2)解析HTML页面
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'lxml')
使用BeautifulSoup
构造器,我们将获取到的内容解析成了一个BeautifulSoup
对象。为后续处理提供了便利。
(3)提取图片链接
img_tags = soup.find_all('img')
img_urls = [img['src'] for img in img_tags]
我们使用soup
对象中提供的find_all
方法,获取了页面中所有的img
节点。遍历这些节点,可以提取其中的图片链接并存储在一个列表对象img_urls
中。
4. 下载图片文件
当我们获取到了所有的图片链接之后,我们就可以使用Python提供的requests
库来下载这些图片了。
import os
for idx, url in enumerate(img_urls):
print('正在下载第{}张图片,链接:{}'.format(idx+1, url))
response = requests.get(url)
folder_name = 'images'
if not os.path.exists(folder_name):
os.makedirs(folder_name)
with open('{}/{}.jpg'.format(folder_name, idx), 'wb') as f:
f.write(response.content)
print('所有图片下载完成')
在以上代码中,我们遍历了所有的图片链接,使用requests
库下载图片并存储在指定的文件夹中(在这里为images
)。为了防止文件夹不存在的情况,我们使用os
库的makedirs
方法先行创建了文件夹。
示例
下面给出两个示例,分别演示了如何获取并下载搜狗图片搜索结果页面中的图片。
示例1:获取前2页的搜狗图片
以下示例可以获取前2页的搜狗图片,并将其保存至本地。
import requests
from bs4 import BeautifulSoup
import os
def download_image(url, max_page):
for i in range(max_page):
params = {
'query': '美女图片',
'mode': 1,
'start': i * 48, # 一页展示48张图片
'reqType': 'ajax',
'tn': 0,
'reqFrom': 'result'
}
response = requests.get(url, params=params)
soup = BeautifulSoup(response.text, 'lxml')
img_tags = soup.find_all('img')
img_urls = [img['src'] for img in img_tags]
folder_name = 'images'
if not os.path.exists(folder_name):
os.makedirs(folder_name)
for idx, img_url in enumerate(img_urls):
print('正在下载第{}张图片,链接:{}'.format(idx+1, img_url))
response = requests.get(img_url)
with open('{}/{}.jpg'.format(folder_name, i*48+idx), 'wb') as f:
f.write(response.content)
print('所有图片下载完成')
if __name__ == '__main__':
url = 'https://pic.sogou.com/pics'
max_page = 2
download_image(url, max_page)
示例2:获取指定关键字的搜狗图片
以下示例可以获取指定关键字的搜狗图片,并将其保存至本地。
import requests
from bs4 import BeautifulSoup
import os
def download_image(url, max_page, keyword):
for i in range(max_page):
params = {
'query': keyword,
'mode': 1,
'start': i * 48, # 一页展示48张图片
'reqType': 'ajax',
'tn': 0,
'reqFrom': 'result'
}
response = requests.get(url, params=params)
soup = BeautifulSoup(response.text, 'lxml')
img_tags = soup.find_all('img')
img_urls = [img['src'] for img in img_tags]
folder_name = 'images_{}'.format(keyword)
if not os.path.exists(folder_name):
os.makedirs(folder_name)
for idx, img_url in enumerate(img_urls):
print('正在下载第{}张图片,链接:{}'.format(idx+1, img_url))
response = requests.get(img_url)
with open('{}/{}.jpg'.format(folder_name, i*48+idx), 'wb') as f:
f.write(response.content)
print('所有图片下载完成')
if __name__ == '__main__':
url = 'https://pic.sogou.com/pics'
max_page = 1
keyword = '猫咪图片'
download_image(url, max_page, keyword)
以上就是“Python爬取网页中的图片(搜狗图片)详解”的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬取网页中的图片(搜狗图片)详解 - Python技术站