柿子饼同学 发表于 2021-3-22 10:34:24

用requests取图片的问题

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

目标URL: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该怎么做呢
import requests as r
import bs4 as b

url = '''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'''
headers={"User-Agent":
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0"}

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



笨鸟学飞 发表于 2021-3-22 10:43:12

爬虫思路
1、获取真实的url信息
2、清洗数据
3、保存数据
思路是一样的,用什么方法都可以,这里建议你去学学requests和xpath,B站一搜一大把
不过你这要爬度娘的,他反爬比较溜,你这样不一定能爬的到

小伤口 发表于 2021-3-22 12:43:21

本帖最后由 小伤口 于 2021-3-22 13:08 编辑

import requests
from bs4 import BeautifulSoup
# 获取页面
def huo_qu(page_url):
    # 加请求头
    headers = {
      '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'}
    res = requests.get(page_url, headers=headers)
    return res

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

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

    return img_addrs

# 保存图片
def bao_cun(img_addrs):

    for each in img_addrs:

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

# 主代码
def download_tx(temp, pages):
    fenglei = {'欧美头像': 'oumei/', '清新头像': 'xiaoqingxin/', '恐怖头像': 'kongbu/', \
               '可爱头像': 'keai/', '小孩头像': 'xiaohai/', '卡通头像': 'katong/', '古风头像': 'gufeng/', '搞笑头像': 'gaoxiao/'}
    url = 'http://www.imeitou.com/' + fenglei
    if pages == 1:
      page_url = url
      res = huo_qu(page_url)
      img_addrs = xun_zhao(res)
      bao_cun(img_addrs)
    else:
      page_url = url + 'index_' + str(pages) + '.html'
      res = huo_qu(page_url)
      img_addrs = xun_zhao(res)
      bao_cun(img_addrs)
if __name__=="__main__":
    temp=input('爬取类型(欧美头像 清新头像)')
    pages=input('爬取第几页')
    download_tx(temp, pages)


基本爬取一般的图片视频都这个步骤
好像我这个针对你这个网站不行获取的文本里都没有图片下载地址{:10_266:}
网页里好像没有下载地址{:10_245:}
只有单独点进去才会出现下载地址
我觉得不应该解析这个网页吧{:10_266:}
我爬虫很菜
不知道咋整,也想蹲个眼{:10_254:}
学习一下{:10_254:}

柿子饼同学 发表于 2021-3-22 13:08:53

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

那我先不设最佳答案?

小伤口 发表于 2021-3-22 13:10:45

柿子饼同学 发表于 2021-3-22 13:08
那我先不设最佳答案?

我发的也对你的没有帮助{:10_266:}

柿子饼同学 发表于 2021-3-22 13:22:45

本帖最后由 柿子饼同学 于 2021-3-22 13:23 编辑

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

好像人家都是贴吧里弄,这百度图片,不要也罢。。。{:10_262:}

YunGuo 发表于 2021-3-23 01:55:52

百度图片有数据接口,请求数据接口可以得到图片url。
import requests
import os
from tqdm import tqdm


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


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


if __name__ == '__main__':
    num = int(input('输入需要下载的页数:'))
    get_img(num)

柿子饼同学 发表于 2021-3-23 14:44:26

YunGuo 发表于 2021-3-23 01:55
百度图片有数据接口,请求数据接口可以得到图片url。

谢谢

Daniel_Zhang 发表于 2021-3-24 22:38:13

柿子饼同学 发表于 2021-3-23 14:44
谢谢

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

我来晚了,不然最佳一定是我的{:10_307:}

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

Daniel_Zhang 发表于 2021-3-24 22:39:17

柿子饼同学 发表于 2021-3-23 14:44
谢谢

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

手把手一条龙,包教包会,百度爬虫{:10_307:}

柿子饼同学 发表于 2021-3-25 07:30:00

Daniel_Zhang 发表于 2021-3-24 22:39
https://fishc.com.cn/thread-189478-1-1.html

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

NB{:10_275:}
页: [1]
查看完整版本: 用requests取图片的问题