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

向右看齐 2022-11-29 12:23 325阅读 0赞

一、分析页面

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

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

二、代码实现

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

  1. import os
  2. import re
  3. import urllib
  4. import requests
  5. import ssl
  6. ssl._create_default_https_context = ssl._create_unverified_context

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

  1. res = requests.get("https://www.nowcoder.com/tutorial/10029/ecbe986667be4d738956f3e105aebe7f")
  2. res.encoding = "utf-8
  3. content4 = re.findall(r'src="(.*?)"', res.text)
  4. print(content4)

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

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

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

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

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

  1. import os
  2. import re
  3. import urllib
  4. import requests
  5. import ssl
  6. ssl._create_default_https_context = ssl._create_unverified_context
  7. res = requests.get("https://www.nowcoder.com/tutorial/10029/ecbe986667be4d738956f3e105aebe7f")
  8. res.encoding = "utf-8"
  9. print(res.text)
  10. # 获取标签中的内容
  11. # 标签中无参数如 <title> <h> <p> 一般未加属性
  12. content1 = re.findall(r'<title>(.*?)</title>', res.text)
  13. content2 = re.findall(r'<p>(.*?)</p>', res.text)
  14. print(content1)
  15. print(content2)
  16. # 标签中含有参数 <a href=""> </a>
  17. # <a.*?>(.*?)</a> .*?略去 完整超链接<a .*? href=.*?<\/a>
  18. content3 = re.findall(r'<a.*?>(.*?)</a>', res.text)
  19. print(content3)
  20. # 爬取参数
  21. # 爬取图片的地址
  22. content4 = re.findall(r'src="(.*?)"', res.text)
  23. print(content4)
  24. list = []
  25. for item in content4:
  26. if(item[0]=='h'):
  27. list.append(item)
  28. print(list)
  29. i = 5
  30. # 进行地址字符串的单独进行请求写入
  31. for item in list:
  32. print(item)
  33. res = requests.get(item)
  34. # open(filename, 'wb') 进行创建文件
  35. with open("/Users/lyf/工程文件/PycharmProjects/Python学习/爬虫/批量下载图片/test/"+str(i)+".jpg", 'wb') as f:
  36. f.write(res.content)
  37. i = i+1

其他注意事项:

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

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读