0
点赞
收藏
分享

微信扫一扫

【华为云认证—爬虫实验】(一)使用Python3编写一个爬取图片的爬虫

夏沐沐 2022-02-24 阅读 58


0.实验目的概述

本实验包含三个实验任务,分为三篇写完:


  • 洞察目的网页以编写Python代码
  • 利用云服务器运行爬虫抓取图片
  • 将图片存储到OBS对象存储桶中

通过完成本实验:


  • 了解Python编程基础及爬虫原理
  • 掌握华为云ECS云主机的获取和使用
  • 掌握华为云OBS对象存储的管理和使用

1.洞察目的网页,获取目的URL

首先使用浏览器访问百度图片(​​​​https://images.baidu.com​​​​),搜索​​华为手机高清壁纸​​:

【华为云认证—爬虫实验】(一)使用Python3编写一个爬取图片的爬虫_html

然后按F12查看当前页面源代码,并且​开启鼠标跟随按钮​:

【华为云认证—爬虫实验】(一)使用Python3编写一个爬取图片的爬虫_html_02

选择想要爬取的图片,在源代码中​复制图片链接:​(​​​​https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=702581300,3850240955&fm=26&gp=0.jpg)​​​​

【华为云认证—爬虫实验】(一)使用Python3编写一个爬取图片的爬虫_搜索_03

在页面按Ctrl+U查看网页源代码,然后按Ctrl+F进入搜索模式,粘贴刚才复制的地址进行搜索,搜索后有四个url:

【华为云认证—爬虫实验】(一)使用Python3编写一个爬取图片的爬虫_html_04


  • thumbURL:缩小版
  • middleURL:缩小版
  • hoverURL:鼠标移过时的版本
  • objURL:高清原版;

所以选择使用​​objURL​​,将该地址记录。

2.编写爬虫代码

2.1.安装需要的包

  • HTTP库:​​requests​
pip3 install requests

【华为云认证—爬虫实验】(一)使用Python3编写一个爬取图片的爬虫_html_05

  • 正则表达式库​​regex​​:自带,不用安装。

2.2.编写代码

  1. 导入库
#-*- coding:utf-8 -*-

import requests # HTTP请求库
import re # 正则表达式库
  1. 从浏览器复制目的网页的url
url = 'https://images.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%8D%8E%E4%B8%BA%E6%89%8B%E6%9C%BA%E9%AB%98%E6%B8%85%E5%A3%81%E7%BA%B8&oq=%E5%8D%8E%E4%B8%BA%E6%89%8B%E6%9C%BA%E9%AB%98%E6%B8%85%E5%A3%81%E7%BA%B8&rsp=-1'
  1. 访问网页,爬取整个网页的数据
html = requests.get(url).text
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
  1. 循环抓取并处理异常
i = 1
for each in pic_url:
print each
try:
pic = requests.get(each,timeout=10) # 10s延时控制
except requests.exceptions.ConnectionError:
print('【错误】当前图片无法下载')
continue
  1. 保存抓取到的图片,先创建一个images目录,把图片都放进去,命名的时候以数字命名:
dir = './images/'+keyword+'_'+str(i)+'.jpg'
fp = open(dir,'wb')
fp.write(pic.content)
fp.close()
i += 1

完整的Python爬虫代码如下:

#-*- coding:utf-8 -*-

import requests # HTTP请求库
import re # 正则表达式库

# 爬取图片函数
def downloadPic(html, keyword):
# 使用正则表达式处理数据,匹配到该网页中所有图片的objURL
pic_url = re.findall('"objURL":"(.*?)"', html, re.S)

# 循环爬取所有图片
i = 1
print('找到关键字:' + keyword + '的图片,现在开始下载图片...')
for each in pic_url:
print('正在下载第' + str(i) + '张图片,图片地址:' + str(each))
try:
pic = requests.get(each, timeout = 10)
except requests.exceptions.ConnectionError:
print('【错误】当前图片无法下载')
continue
# 爬取图片数据并保存
dir = './images/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1


if __name__ == "__main__":
# 提示用户输入图片搜索关键字
word = input("Input Key Word:")

# 构造搜索url
url = 'https://images.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' \
+ word \
+ '&ct=201326592&v=flip'

# 获取整个搜索数据
result = requests.get(url)

# 下载图片并保存到本地
downloadPic(result.text, word)

运行结果:

【华为云认证—爬虫实验】(一)使用Python3编写一个爬取图片的爬虫_数据_06



举报

相关推荐

0 条评论