都知道Python的语法很简单易上手,Python 也很适合拿来做爬虫等等,今天在这里就简单地用2种方法爬取下载贴吧图片。
环境:
- python 3.6
- 标准库
- urllib 的 request 模块
- re 模块
- 第三方库
- beautifulsoup4
第一种方法:
-
使用 re 正则表达式获得图片 url
使用 request 下载图片
- 这里我们导入了两个模块,分别是 urllib 的 request 模块 和 re 模块。
urllib 是用来进行 url 网络请求的,re 是一个正则表达式匹配的库。这里我们要先对网站进行模拟请求,然后找到网站中的图片进行下载。
# -*- coding: utf-8 -*-
# 导入 urllib 的 request 模块
from urllib import request
# 导入 re 模块
import re
# 网页地址,想下那个吧的图片,直接粘过来
url_one = "https://tieba.baidu.com/p/4452821383"
# 打开网页,这里需要对网页进行解码
html_one = request.urlopen(url_one).read().decode("utf-8")
#定义一个下载图片的函数
def get_img_re(info): # info 参数是传解码后的网页
'''get image use re'''
# regex 是匹配图片 url 的正则表达式
regex = r'<img class="BDE_Image" src="(.+?\.jpg)"'
rege = re.compile(regex) # 对regex进行编译
img_list = re.findall(rege,info) # 获取网页内图片的 url 列表
for img_url in img_list: # 循环列表得到图片的 url
img_name = img_url.rsplit('/')[-1] # 获得图片名称
print(img_name)
request.urlretrieve(img_url,img_name) # 保存图片
return len(img_list) # 返回图片数量
img_count_one = get_img_re(html_one) # 得到图片数量
print("图片下载完成!!!\n共计 %d 张图片!!!" % img_count_one)
第二种方法:
-
使用 beautifulsoup 获得图片 url
使用 request 下载图片
- 这里我们导入了两个模块,分别是 urllib 的 request 模块 和 bs4 的 BeautifulSoup 模块。
# -*- coding: utf-8 -*-
# 导入 urllib 的 request 模块
from urllib import request
# 导入 bs4 的 BeautifulSoup 模块
from bs4 import BeautifulSoup
# 网页地址,想下那个吧的图片,直接粘过来
url_two = "https://tieba.baidu.com/p/4619916043"
# 打开网页,这里不需要对网页进行解码
html_two = request.urlopen(url_two)
#定义一个下载图片的函数
def get_img_bs4(info): # info 参数是传打开后的网页
'''get image use bs4'''
soup = BeautifulSoup(info,"html5lib") # 这里 BeautifulSoup 会对网页进行解码,html5lib 是以 html5 格式进行解码
img_list = soup.find_all("img",class_="BDE_Image") # 获取网页内图片的 img标签 列表
for img in img_list: # 循环列表得到一个 img标签
img_url = img["src"] # 从 img标签 中提取 图片url
img_name = img_url.rsplit('/')[-1] # 获得图片名称
print(img_name)
request.urlretrieve(img_url,img_name) # 保存图片
return len(img_list) # 返回图片数量
img_count_two = get_img_bs4(html_two) # 得到图片数量
print("图片下载完成!!!\n共计 %d 张图片!!!" % img_count_two)