【爬虫入门】爬取图片并保存在本地

一、分析页面

明确所需爬取的标签 -> 分析正则匹配

      大家都知道,图片的标签为< img src="">,所以说根据标签想获取图片的网络URL是很容易的(r’src="(.*?)"’),另外有个可以进行正则表达式建议的网站推荐(在线正则测试

二、代码实现

(1)引入库
requests 、re 、os 、SSL(有时可能存在认证问题)

import os
import re
import urllib
import requests
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

(2)请求响应获取页面内容并进行正则匹配

res = requests.get("https://www.nowcoder.com/tutorial/10029/ecbe986667be4d738956f3e105aebe7f")
res.encoding = "utf-8

content4 = re.findall(r'src="(.*?)"', res.text)
print(content4)

在这里插入图片描述
请求之后可以获取了一个url的列表
(3)根据URL列表进行逐一请求、创建文件下载

# 爬取下来的还有非网络url所以进行了处理
list = []
for item in content4:
  if(item[0]=='h'):
    list.append(item)
print(list)
i = 5
# 进行地址字符串的单独进行请求写入
for item in list:
  print(item)
  res = requests.get(item)
  # open(filename, 'wb') 进行创建文件
  with open("/Users/lyf/工程文件/PycharmProjects/Python学习/爬虫/批量下载图片/test/"+str(i)+".jpg", 'wb') as f:
    f.write(res.content)
  i = i+1

本文采用的f.write方式写入,初次之外,还可以采用urllib的urlretriev

urllib.request.urlretrieve(image_url, filename=filename)

然后看看效果在这里插入图片描述
完整代码:

import os
import re
import urllib
import requests
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
res = requests.get("https://www.nowcoder.com/tutorial/10029/ecbe986667be4d738956f3e105aebe7f")
res.encoding = "utf-8"
print(res.text)
# 获取标签中的内容
# 标签中无参数如 <title> <h> <p> 一般未加属性
content1 = re.findall(r'<title>(.*?)</title>', res.text)
content2 = re.findall(r'<p>(.*?)</p>', res.text)
print(content1)
print(content2)

# 标签中含有参数 <a href=""> </a>
# <a.*?>(.*?)</a>  .*?略去  完整超链接<a .*? href=.*?<\/a>
content3 = re.findall(r'<a.*?>(.*?)</a>', res.text)
print(content3)

# 爬取参数

# 爬取图片的地址
content4 = re.findall(r'src="(.*?)"', res.text)
print(content4)
list = []
for item in content4:
  if(item[0]=='h'):
    list.append(item)
print(list)
i = 5
# 进行地址字符串的单独进行请求写入
for item in list:
  print(item)
  res = requests.get(item)
  # open(filename, 'wb') 进行创建文件
  with open("/Users/lyf/工程文件/PycharmProjects/Python学习/爬虫/批量下载图片/test/"+str(i)+".jpg", 'wb') as f:
    f.write(res.content)
  i = i+1

其他注意事项:

(1)文件创建
采用open(filename,‘wb’)即可,刚开始还使用了mknod创建但是出现unpermmited的情况;
关于Python文件操作可以参考文件操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值