鱼C论坛

 找回密码
 立即注册
查看: 1887|回复: 4

[原创] 百度爬图

[复制链接]
发表于 2021-1-23 19:50:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import requests
  2. from urllib.parse import urlencode
  3. import re
  4. import os
  5. import time

  6. #计划将图片都保存在E盘叫“百度图片”的文件夹下
  7. filelist = os.listdir(path='E:\\')
  8. if ('百度图片') not in filelist:
  9.     os.mkdir("E:\\百度图片")

  10. headers = {
  11.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'
  12. }  

  13. name = input("请输入您需要爬取的图片信息:")

  14. filelist = os.listdir(path='E:\\百度图片')

  15. #检查在百度图片文件夹下是否存在以搜索内容为名的文件夹
  16. #若存在,则说明以前曾爬取过相关内容,不再新建以此搜索内容命名的文件夹
  17. #若不存在,则说明以前未曾搜索过相关内容,新建文件夹以保存此次爬取的图片
  18. if (name) not in filelist:
  19.     os.mkdir("E:\\百度图片/%s"%name)
  20. before_path = "E:/百度图片/" + name +'/'

  21. times = time.gmtime()
  22. t=str(time.mktime(times))

  23. #通过输入的需要搜索的内容拼接出百度的相关内容的搜索链接
  24. def get_url(name):
  25.     bef_url = 'https://image.baidu.com/search/index?'

  26.     data = {
  27.         'tn': 'resultjson_com',
  28.         'logid': '7364932782014356645',
  29.         'ipn': 'rj',
  30.         'ct': '201326592',
  31.         'is': '',
  32.         'fp': 'result',
  33.         'queryWord': '二次元图片',
  34.         'cl': '2',
  35.         'lm': '-1',
  36.         'ie': 'utf-8',
  37.         'oe': 'utf-8',
  38.         'adpicid': '',
  39.         'st': '',
  40.         'z': '',
  41.         'ic': '',
  42.         'hd': '',
  43.         'latest': '',
  44.         'copyright': '',
  45.         'word': '二次元图片',
  46.         's': '',
  47.         'se': '',
  48.         'tab': '',
  49.         'width': '',
  50.         'height': '',
  51.         'face': '',
  52.         'istype': '',
  53.         'qc': '',
  54.         'nc': '',
  55.         'fr': '',
  56.         'expermode': '',
  57.         'force': '',
  58.         'pn': '30',
  59.         'rn': '30',
  60.         'gsm': '1e',
  61.         '1611387183889': ''
  62.     }

  63.     data['word'] = name
  64.     data['word'] = name

  65.     url = bef_url + urlencode(data)
  66.     return url

  67. url = get_url(name)

  68. #将链接传递给get_add函数,该函数将会取得前三十张图片的连接
  69. def get_add(url):
  70.     response = requests.get(url=url,headers=headers)
  71.     if response.status_code == requests.codes.ok:
  72.         html = response.text

  73.         regular = re.compile('"middleURL":"(.*?)"')

  74.         result = regular.findall(html)

  75.     else :
  76.         result = False

  77.     return result


  78. result = get_add(url)

  79. if result == False:
  80.     print("搜索出错!!!\n请重试")

  81. elif not result:
  82.     print("您搜索的内容不存在!!!")
  83.     os.rmdir("E:\\百度图片/%s"%name)

  84. else:
  85. #下载图片并保存
  86.     while(result):
  87.         url = result.pop()
  88.         response = requests.get(url=url,headers=headers)
  89.         html = response.content
  90.         name = url.split('/')[-1]

  91.         path = before_path + t + name

  92.         with open(path,'wb') as f:
  93.             f.write(html)
复制代码


在一个大佬的指导下写了这个爬百度图的程序,有大佬能优化一下,或者指出我的不足就再好不过了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-23 20:44:28 | 显示全部楼层
1. 函数名 get_add 不行。
2. 既然后面是用 result.pop() 来依次弹出 url 进行处理,那么完全可以换成迭代器。
3. 没用到 try-except。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 20:29:54 | 显示全部楼层
兼容性没那么好吧,只支持 win 然后还必须得是有 E盘 的 win
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-28 21:42:20 | 显示全部楼层
°蓝鲤歌蓝 发表于 2021-1-23 20:44
1. 函数名 get_add 不行。
2. 既然后面是用 result.pop() 来依次弹出 url 进行处理,那么完全可以换成迭代 ...

呃,大佬,还没学到迭代器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-28 21:43:02 | 显示全部楼层
Daniel_Zhang 发表于 2021-1-25 20:29
兼容性没那么好吧,只支持 win 然后还必须得是有 E盘 的 win

初学者嘛,理解一下,哈哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 13:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表