一、搭建爬虫框架
1、创建项目
①打开pycharm
②新建一个项目
创建完成后,就可以正式开始代码编写了
不同版本python都可以使用此代码,我此处使用的是从anaconda中创建的虚拟环境中下载的3.6版本的python。关于如何创建虚拟环境,可以参考Anaconda如何构建虚拟环境。
2、导入此项目所需要的库
# 导入所需要的库
import os # 操作系统
import re # 正则表达式
import requests # http客户端库
3、获取网站源代码
# 获取网络源代码
def get_html(url, headers, params):
response = requests.get(url, headers=headers, params=params)
# 设置源代码的编码方式
response.encoding = "utf-8"
# 利用循环判断网页是否能打开
if response.status_code == 200:
return response.text
else:
print("网址源码获取错误")
4、提取图片的源地址
# 解析提取图片的源地址
def parse_pic_url(html):
result = re.findall('thumbURL":"(.*?)"', html, re.S)
return result
5、获取图片二进制源码
# 获取图片二进制源码
def get_pic_content(url):
response = requests.get(url)
return response.content
6、创建文件夹对图片进行保存
# 定义一个文件夹保存
def create_fold(fold_name):
# 异常处理
try:
os.mkdir(fold_name)
except:
print("文件夹已存在")
7、保存图片
# 保存图片
def save_pic(fold_name,content,pic_name):
with open(fold_name + "/" + str(pic_name)+".jpg","wb") as f:
f.write(content)
f.close()
8、定义main函数对get_html函数进行调用
#定义main函数调用get_html函数
def main():
#输入文件夹名字
fold_name = input("请输入图片名:")
#输入你要抓取的数量
page_num = input("请输入你要抓取的页数:")
#调用函数,创建文件夹
create_fold(fold_name)
#定义图片名字
pic_name = 0
#构建循环.控制页面
for i in range(int(page_num)):
url =
headers = {}
params = {}
html = get_html(url, headers, params)
result = parse_pic_url(html)
# 使用for循环遍历列表
for item in result:
# 调用函数,获取二进制源码
pic_content = get_pic_content(item)
save_pic(fold_name, pic_content, pic_name)
pic_name += 1
print("正在保存第" + str(pic_name))
# 执行main函数
if __name__ == '__main__':
main()
完整代码:
# 导入所需要的库
import os # 操作系统
import re # 正则表达式
import requests # http客户端库
# 获取网络源代码
def get_html(url, headers, params):
response = requests.get(url, headers=headers, params=params)
# 设置源代码的编码方式
response.encoding = "utf-8"
# 利用循环判断网页是否能打开
if response.status_code == 200:
return response.text
else:
print("网址源码获取错误")
# 解析提取图片的源地址
def parse_pic_url(html):
result = re.findall('thumbURL":"(.*?)"', html, re.S)
return result
# 获取图片二进制源码
def get_pic_content(url):
response = requests.get(url)
return response.content
# 定义一个文件夹保存
def create_fold(fold_name):
# 异常处理
try:
os.mkdir(fold_name)
except:
print("文件夹已存在")
# 保存图片
def save_pic(fold_name,content,pic_name):
with open(fold_name + "/" + str(pic_name)+".jpg","wb") as f:
f.write(content)
f.close()
#定义main函数调用get_html函数
def main():
#输入文件夹名字
fold_name = input("请输入图片名:")
#输入你要抓取的数量
page_num = input("请输入你要抓取的页数:")
#调用函数,创建文件夹
create_fold(fold_name)
#定义图片名字
pic_name = 0
#构建循环.控制页面
for i in range(int(page_num)):
url:
headers = {}
params = {}
html = get_html(url, headers, params)
# print(html)
result = parse_pic_url(html)
# 使用for循环遍历列表
for item in result:
# 调用函数,获取二进制源码
pic_content = get_pic_content(item)
save_pic(fold_name, pic_content, pic_name)
pic_name += 1
print("正在保存第" + str(pic_name))
# 执行main函数
if __name__ == '__main__':
main()
至此,整个图片爬取程序框架便完成了。
二、图片爬取
1、为框架中导入数据
打开浏览器搜索你想要爬取的图片,这里以搜索大熊猫为例
鼠标右键单击该页面任意位置点击检查按钮,或者直接按f12
选择Fetch/XHR,并刷新界面一直往下拉,你会发现acjson文件正在不断增加,点击其中一个acjson文件选择标头,复制其中的url铁道代码之中
对该页面往下翻,并复制框中信息粘贴在header中(注:粘贴时优先打三对双引号注释后再粘贴,这样能够最高程度避免粘贴胡乱换行的情况)
在粘贴完成后在左边的名称上打上双引号,在右边信息同样加上双引号,有双引号的信息使用单引号,避免引号冲突,且每边有且只有一对引号
回到网页中点击负载并复制框中内容贴到params中
同样在两边打上双引号,并删除无内容的名称
原数据pn中为30,这里是修改后的
完成这一切后就可以正常爬取图片了。
本期教程到此结束,喜欢的点个赞吧。