下面我将详细讲解“Python3简单爬虫抓取网页图片代码实例”的完整攻略。
Python3简单爬虫抓取网页图片代码实例
实现原理
使用requests
获取网页HTML源码,使用BeautifulSoup
解析出网页中的图片URL,然后使用requests
库将图片下载到本地。
代码实现
首先需要安装requests
和BeautifulSoup
模块,可以使用以下命令进行安装:
pip install requests
pip install beautifulsoup4
然后就可以开始编写代码了:
import os
import requests
from bs4 import BeautifulSoup
url = 'https://www.example.com' # 替换成要爬取的网页
# 获取网页HTML源码
html = requests.get(url, timeout=10).text
bs_obj = BeautifulSoup(html, 'html.parser')
# 空的图片链接列表
img_list = []
# 解析图片链接
for img in bs_obj.find_all('img'):
img_url = img.get('src') # 获取图片链接
if img_url and 'http' in img_url:
img_list.append(img_url)
# 下载图片
for img_url in img_list:
try:
res = requests.get(img_url)
if str(res.status_code)[0] == '4': # 判断请求是否成功
print('请求失败:', img_url)
continue
with open(os.path.join('./images/', os.path.basename(img_url)), 'wb') as f:
f.write(res.content)
print('下载成功:', img_url)
except Exception as e:
print('下载失败:', img_url, e)
以上代码会首先获取指定网页的HTML源码,然后使用BeautifulSoup
解析出网页中的所有图片链接,并将其存储到img_list
列表中。接下来,使用requests
和os
模块,依次将每个图片链接的图片保存到本地的./images/
路径下,并在下载成功后打印下载成功的提示信息,如果下载失败则打印下载失败的提示信息。
下面给出两个示例说明。
示例一
假设我们要爬取《阿拉丁》电影海报,可以使用以下代码:
import os
import requests
from bs4 import BeautifulSoup
url = 'https://movie.douban.com/subject/27083561/' # 阿拉丁电影豆瓣页面
# 获取网页HTML源码
html = requests.get(url, timeout=10).text
bs_obj = BeautifulSoup(html, 'html.parser')
# 空的图片链接列表
img_list = []
# 解析图片链接
for img in bs_obj.find_all('img'):
img_url = img.get('src') # 获取图片链接
if img_url and 'https://img' in img_url and 's_ratio' in img_url:
img_list.append(img_url)
# 下载图片
for img_url in img_list:
try:
res = requests.get(img_url)
if str(res.status_code)[0] == '4': # 判断请求是否成功
print('请求失败:', img_url)
continue
with open(os.path.join('./images/', os.path.basename(img_url)), 'wb') as f:
f.write(res.content)
print('下载成功:', img_url)
except Exception as e:
print('下载失败:', img_url, e)
以上代码会首先访问《阿拉丁》电影的豆瓣页面,然后解析出所有符合条件的图片链接(即链接中包含https://img
且包含s_ratio
),并将其保存到img_list
列表中。接下来,使用requests
和os
模块,依次将每个海报图片保存到本地的./images/
路径下,并在下载成功后打印下载成功的提示信息,如果下载失败则打印下载失败的提示信息。
示例二
假设我们要爬取一个图片分享网站的某个图片分类下的所有图片,可以使用以下代码:
import os
import requests
from bs4 import BeautifulSoup
url = 'https://www.example.com/category/pictures' # 替换成对应的图片分类页
# 获取网页HTML源码
html = requests.get(url, timeout=10).text
bs_obj = BeautifulSoup(html, 'html.parser')
# 空的图片链接列表
img_list = []
# 解析图片链接
for img in bs_obj.find_all('img'):
img_url = img.get('src') # 获取图片链接
if img_url and 'http' in img_url and '.jpg' in img_url:
img_list.append(img_url)
# 下载图片
for img_url in img_list:
try:
res = requests.get(img_url)
if str(res.status_code)[0] == '4': # 判断请求是否成功
print('请求失败:', img_url)
continue
with open(os.path.join('./images/', os.path.basename(img_url)), 'wb') as f:
f.write(res.content)
print('下载成功:', img_url)
except Exception as e:
print('下载失败:', img_url, e)
以上代码会首先访问指定的图片分类页,然后解析出所有图片链接,仅保留链接中包含http
且包含.jpg
的图片链接,并将其保存到img_list
列表中。接下来,使用requests
和os
模块,依次将每个图片保存到本地的./images/
路径下,并在下载成功后打印下载成功的提示信息,如果下载失败则打印下载失败的提示信息。
注意事项
在使用代码进行爬取时,需要注意网站的版权和隐私政策,尊重网站的规定,不要进行违法和不道德的行为,遵循良好的爬虫规范。同时,由于一些网站可能会采取反爬虫措施,我们需要根据具体情况对代码进行相应的修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3简单爬虫抓取网页图片代码实例 - Python技术站