1.request库(安装,删除,常用方法)
2.BeautifulSoup库(安装)
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象。所有对象可以归纳为4种类型: Tag , NavigableString , BeautifulSoup , Comment 。下面我们分别看看这四种类型都是什么东西。
3.解析器
https://blog.csdn.net/qq_33279781/article/details/52026806
BeautifulSoup 库的使用(重点)
import requests #导入requests库
import lxml #导入解析器
import os # 导入os模块
from bs4 import BeautifulSoup #导入BeautifulSoup 模块
# 创建一个类,
class downPic() :
# 初始化类
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} # 给请求指定一个请求头来模拟chrome浏览器
self.web_url = 'http://www.nipic.com' # 要访问的网页地址
self.folder_path = 'D:\downPic' # 设置图片要存放的文件目录
# 封装request请求
def request(self, url): # 返回网页的response
r = requests.get(url, headers=self.headers) # 像目标url地址发送get请求,返回一个response对象。有没有headers参数都可以。
return r
# 这个函数创建文件夹
def mkdir(self, path):
path = path.strip()
isExists = os.path.exists(path)
if not isExists:
print('创建名字叫做', path, '的文件夹')
os.makedirs(path)
print('创建成功!')
else:
print(path, '文件夹已经存在了,不再创建')
# 保存图片IO读取保存图片
def save_img(self, url, name):
print('开始请求图片地址,过程会有点长...')
img = self.request(url)
file_name = name + '.jpg'
print('开始保存图片')
# 打开文件 打开模式为ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
f = open(file_name, 'ab')
f.write(img.content)
print(file_name, '图片保存成功!')
f.close()
def get_fileName(self, url):
# http://static.nipic.com/images/police.png
path = url# 将url转换为字符串类型操作
filename = path.split('/')[-1]# police.png
try:
filename = filename.split('.')[0]# police
except:
pass
return filename
# 工具方法都已经准备完毕,开始我们的逻辑部分
def get_pic(self):
# 使用request获取目标网页
r = requests.get(self.web_url)
# 抓取图片 将request抓取到的html页面 r.text转换成对象, lxml是解析器 html.parser
all_a = BeautifulSoup(r.text, 'lxml').find_all('img') # 获取网页中的所有img表情
# 有了这些图片的url,就可以通过继续发请求的方式获取图片啦。接下来我们先来封装一下发请求的代码。
for a in all_a:
# print(a['src']) # 循环打印图片地址
print('开始创建文件夹')
self.mkdir(self.folder_path) # 创建文件夹
print('开始切换文件夹')
os.chdir(self.folder_path) # 切换路径至上面创建的文件夹
img_name = self.get_fileName(a['src'])
#调用save_img方法来保存图片
self.save_img(a['src'], img_name) ;
beauty = downPic() #创建类的实例
beauty.get_pic() #执行类中的方法
成功,这里只能获取到网站的内容是静态加载的内容,动态加载获取不到哦,下一步就是解决这个问题.