鱼C论坛

 找回密码
 立即注册
查看: 2216|回复: 10

[已解决]用requests取图片的问题

[复制链接]
发表于 2021-3-22 10:34:24 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 柿子饼同学 于 2021-3-22 10:40 编辑

目标URL:
  1. https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%E5%AE%A0%E7%89%A9%E5%9B%BE%E7%89%87&fr=albumslist&album_tab=%E5%8A%A8%E7%89%A9&album_id=688&rn=30
复制代码
传送门就是想取得前5张吧

我看的书上是用urllib.request取得图片,那如果用requests和bs4该怎么做呢
  1. import requests as r
  2. import bs4 as b

  3. url = '''https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%E5%AE%A0%E7%89
  4. %A9%E5%9B%BE%E7%89%87&fr=albumslist&album_tab=%E5%8A%A8%E7%89%A9&album_id=688&rn=30'''
  5. headers={"User-Agent":
  6.         "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0"}

  7. res = r.get(url,headers = headers)
  8. s = b.BeautifulSoup(res.text, 'html.parser')
  9. link = s.find_all('div', class_ = 'albumsdetail-item')
  10. #后面不知怎么写了
复制代码



最佳答案
2021-3-23 01:55:52
百度图片有数据接口,请求数据接口可以得到图片url。
  1. import requests
  2. import os
  3. from tqdm import tqdm


  4. def save_img(wd, id_, url):
  5.     if not os.path.exists(wd):
  6.         os.mkdir(wd)
  7.     img_name = f'{wd}/{id_}.jpeg'
  8.     if not os.path.exists(img_name):
  9.         img = requests.get(url)
  10.         with open(img_name, 'wb') as f:
  11.             f.write(img.content)


  12. def get_img(page):
  13.     url = 'https://image.baidu.com/search/albumsdata'  # 数据接口
  14.     header = {'user-agent': 'Mozilla/5.0'}
  15.     rn = 30
  16.     word = '宠物图片'
  17.     for i in range(0, page):
  18.         pn = i * rn
  19.         params = {
  20.             'pn': pn,  # 翻页参数(每一页+30)
  21.             'rn': rn,  # 每一页图片数(固定30)
  22.             'tn': 'albumsdetail',  # 类型(albumsdetail)
  23.             'word': word,  # 关键词
  24.             'album_tab': '动物',  # 专辑(例如你想爬动物,那么这个参数就是动物)
  25.             'album_id': 688,  # 专辑id(动物专辑id是688)
  26.             'curPageNum': i  # 翻页参数,页码
  27.         }
  28.         res = requests.get(url, headers=header, params=params).json()
  29.         imgs = res.get('albumdata').get('linkData')
  30.         for img in tqdm(imgs, f'第{i+1}页'):
  31.             img_id = img.get('pid')
  32.             img_url = img.get('thumbnailUrl')
  33.             save_img(word, img_id, img_url)


  34. if __name__ == '__main__':
  35.     num = int(input('输入需要下载的页数:'))
  36.     get_img(num)
复制代码


屏幕截图 2021-03-22 103135.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-22 10:43:12 | 显示全部楼层
爬虫思路
1、获取真实的url信息
2、清洗数据
3、保存数据
思路是一样的,用什么方法都可以,这里建议你去学学requests和xpath,B站一搜一大把
不过你这要爬度娘的,他反爬比较溜,你这样不一定能爬的到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 12:43:21 | 显示全部楼层
本帖最后由 小伤口 于 2021-3-22 13:08 编辑

  1. import requests
  2. from bs4 import BeautifulSoup
  3. # 获取页面
  4. def huo_qu(page_url):
  5.     # 加请求头
  6.     headers = {
  7.         'user-agent': ""'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Mobile Safari/537.36 Edg/89.0.774.45'}
  8.     res = requests.get(page_url, headers=headers)
  9.     return res

  10. # 查找图片下载链接,并保存链接
  11. def xun_zhao(res):
  12.     # 用BeautifulSoup解析
  13.     soup = BeautifulSoup(res.text,features="lxml")

  14.     img_addrs = []
  15.     # 查找所有有img的标签
  16.     for link in soup.find_all('img'):
  17.         # 找到有src属性的链接并保存
  18.         if link.get('src') not in img_addrs:
  19.             img_addrs.append(link.get('src'))
  20.             if len(img_addrs)>=16:
  21.                 break

  22.     return img_addrs

  23. # 保存图片
  24. def bao_cun(img_addrs):

  25.     for each in img_addrs:

  26.         filename = each.split('/')[-1]
  27.         r = requests.get(each)
  28.         with open(filename, 'wb') as f:
  29.             f.write(r.content)

  30. # 主代码
  31. def download_tx(temp, pages):
  32.     fenglei = {'欧美头像': 'oumei/', '清新头像': 'xiaoqingxin/', '恐怖头像': 'kongbu/', \
  33.                '可爱头像': 'keai/', '小孩头像': 'xiaohai/', '卡通头像': 'katong/', '古风头像': 'gufeng/', '搞笑头像': 'gaoxiao/'}
  34.     url = 'http://www.imeitou.com/' + fenglei[temp]
  35.     if pages == 1:
  36.         page_url = url
  37.         res = huo_qu(page_url)
  38.         img_addrs = xun_zhao(res)
  39.         bao_cun(img_addrs)
  40.     else:
  41.         page_url = url + 'index_' + str(pages) + '.html'
  42.         res = huo_qu(page_url)
  43.         img_addrs = xun_zhao(res)
  44.         bao_cun(img_addrs)
  45. if __name__=="__main__":
  46.     temp=input('爬取类型(欧美头像 清新头像)')
  47.     pages=input('爬取第几页')
  48.     download_tx(temp, pages)

复制代码

基本爬取一般的图片视频都这个步骤

好像我这个针对你这个网站不行获取的文本里都没有图片下载地址
网页里好像没有下载地址
只有单独点进去才会出现下载地址
我觉得不应该解析这个网页吧
我爬虫很菜
不知道咋整,也想蹲个眼
学习一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-22 13:08:53 | 显示全部楼层
小伤口 发表于 2021-3-22 12:43
基本爬取一般的图片视频都这个步骤
好像我这个针对你这个网站不行获取的文本里都没有图片下载地址{:10_2 ...

那我先不设最佳答案?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 13:10:45 | 显示全部楼层
柿子饼同学 发表于 2021-3-22 13:08
那我先不设最佳答案?

我发的也对你的没有帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-22 13:22:45 | 显示全部楼层
本帖最后由 柿子饼同学 于 2021-3-22 13:23 编辑
小伤口 发表于 2021-3-22 12:43
基本爬取一般的图片视频都这个步骤
好像我这个针对你这个网站不行获取的文本里都没有图片下载地址{:10_2 ...


好像人家都是贴吧里弄,这百度图片,不要也罢。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-23 01:55:52 | 显示全部楼层    本楼为最佳答案   
百度图片有数据接口,请求数据接口可以得到图片url。
  1. import requests
  2. import os
  3. from tqdm import tqdm


  4. def save_img(wd, id_, url):
  5.     if not os.path.exists(wd):
  6.         os.mkdir(wd)
  7.     img_name = f'{wd}/{id_}.jpeg'
  8.     if not os.path.exists(img_name):
  9.         img = requests.get(url)
  10.         with open(img_name, 'wb') as f:
  11.             f.write(img.content)


  12. def get_img(page):
  13.     url = 'https://image.baidu.com/search/albumsdata'  # 数据接口
  14.     header = {'user-agent': 'Mozilla/5.0'}
  15.     rn = 30
  16.     word = '宠物图片'
  17.     for i in range(0, page):
  18.         pn = i * rn
  19.         params = {
  20.             'pn': pn,  # 翻页参数(每一页+30)
  21.             'rn': rn,  # 每一页图片数(固定30)
  22.             'tn': 'albumsdetail',  # 类型(albumsdetail)
  23.             'word': word,  # 关键词
  24.             'album_tab': '动物',  # 专辑(例如你想爬动物,那么这个参数就是动物)
  25.             'album_id': 688,  # 专辑id(动物专辑id是688)
  26.             'curPageNum': i  # 翻页参数,页码
  27.         }
  28.         res = requests.get(url, headers=header, params=params).json()
  29.         imgs = res.get('albumdata').get('linkData')
  30.         for img in tqdm(imgs, f'第{i+1}页'):
  31.             img_id = img.get('pid')
  32.             img_url = img.get('thumbnailUrl')
  33.             save_img(word, img_id, img_url)


  34. if __name__ == '__main__':
  35.     num = int(input('输入需要下载的页数:'))
  36.     get_img(num)
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-23 14:44:26 | 显示全部楼层
YunGuo 发表于 2021-3-23 01:55
百度图片有数据接口,请求数据接口可以得到图片url。

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 22:38:13 | 显示全部楼层

https://fishc.com.cn/thread-189478-1-1.html

我来晚了,不然最佳一定是我的

百度图片爬虫一条龙,手把手包教包会
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 22:39:17 | 显示全部楼层

https://fishc.com.cn/thread-189478-1-1.html

手把手一条龙,包教包会,百度爬虫
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-25 07:30:00 | 显示全部楼层
Daniel_Zhang 发表于 2021-3-24 22:39
https://fishc.com.cn/thread-189478-1-1.html

手把手一条龙,包教包会,百度爬虫

NB
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 15:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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