aa吴所谓 发表于 2020-7-24 17:54

python爬取百度图库多张图片




1983 发表于 2020-7-24 19:04

本帖最后由 1983 于 2020-7-26 00:34 编辑

powehi777 发表于 2020-7-24 18:42
这是我写的,嘻嘻
import re
import requests


楼主,下次这样,方便你我他。。。
import re
import sys
import urllib
import requests


def get_onepage_urls(onepageurl):
    """获取单个翻页的所有图片的urls+当前翻页的下一翻页的url"""
    if not onepageurl:
      print('已到最后一页, 结束')
      return [], ''
    try:
      html = requests.get(onepageurl).text
    except Exception as e:
      print(e)
      pic_urls = []
      fanye_url = ''
      return pic_urls, fanye_url
    pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
    fanye_urls = re.findall(re.compile(r'<a href="(.*)" class="n">下一页</a>'), html, flags=0)
    fanye_url = 'http://image.baidu.com' + fanye_urls if fanye_urls else ''
    return pic_urls, fanye_url


def down_pic(pic_urls):
    """给出图片链接列表, 下载所有图片"""
    for i, pic_url in enumerate(pic_urls):
      try:
            pic = requests.get(pic_url, timeout=15)
            string = str(i + 1)+'.jpg'
            with open(string, 'wb') as f:
                f.write(pic.content)
                print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
      except Exception as e:
            print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
            print(e)
            continue


if __name__ == '__main__':
    keyword = input("请输入搜索关键词:")# 关键词, 改为你想输入的词即可, 相当于在百度图片里搜索一样
    url_init_first = r'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word='
    url_init = url_init_first + urllib.parse.quote(keyword, safe='/')
    all_pic_urls = []
    onepage_urls, fanye_url = get_onepage_urls(url_init)
    all_pic_urls.extend(onepage_urls)

    fanye_count = 0# 累计翻页数
    n=input("请输入翻页数:")
    while fanye_count<int(n):
      onepage_urls, fanye_url = get_onepage_urls(fanye_url)
      fanye_count += 1
      print('第%s页' % fanye_count)
      if fanye_url == '' and onepage_urls == []:
            break
      all_pic_urls.extend(onepage_urls)

    down_pic(list(set(all_pic_urls)))

Menguy 发表于 2020-7-24 18:37

aa吴所谓 发表于 2020-7-24 18:39

第一次玩,不太会,以后注意{:301_998:}

aa吴所谓 发表于 2020-7-24 18:40

Menguy 发表于 2020-7-24 18:37
为啥最近发python的都喜欢发截图,论坛又不是不能代码,实在不行把源代码上传也行

import re
import sys
import urllib
import requests


def get_onepage_urls(onepageurl):
    """获取单个翻页的所有图片的urls+当前翻页的下一翻页的url"""
    if not onepageurl:
      print('已到最后一页, 结束')
      return [], ''
    try:
      html = requests.get(onepageurl).text
    except Exception as e:
      print(e)
      pic_urls = []
      fanye_url = ''
      return pic_urls, fanye_url
    pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
    fanye_urls = re.findall(re.compile(r'<a href="(.*)" class="n">下一页</a>'), html, flags=0)
    fanye_url = 'http://image.baidu.com' + fanye_urls if fanye_urls else ''
    return pic_urls, fanye_url


def down_pic(pic_urls):
    """给出图片链接列表, 下载所有图片"""
    for i, pic_url in enumerate(pic_urls):
      try:
            pic = requests.get(pic_url, timeout=15)
            string = str(i + 1)+'.jpg'
            with open(string, 'wb') as f:
                f.write(pic.content)
                print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
      except Exception as e:
            print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
            print(e)
            continue


if __name__ == '__main__':
    keyword = input("请输入搜索关键词:")# 关键词, 改为你想输入的词即可, 相当于在百度图片里搜索一样
    url_init_first = r'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word='
    url_init = url_init_first + urllib.parse.quote(keyword, safe='/')
    all_pic_urls = []
    onepage_urls, fanye_url = get_onepage_urls(url_init)
    all_pic_urls.extend(onepage_urls)

    fanye_count = 0# 累计翻页数
    n=input("请输入翻页数:")
    while fanye_count<int(n):
      onepage_urls, fanye_url = get_onepage_urls(fanye_url)
      fanye_count += 1
      print('第%s页' % fanye_count)
      if fanye_url == '' and onepage_urls == []:
            break
      all_pic_urls.extend(onepage_urls)

    down_pic(list(set(all_pic_urls)))

mwj123 发表于 2020-7-24 18:41

谢谢分享,学习了

aa吴所谓 发表于 2020-7-24 18:45

powehi777 发表于 2020-7-24 18:42
这是我写的,嘻嘻
import re
import requests


会不会搜狗图库的翻页啊,我不太会{:1_937:}

wstnl 发表于 2020-7-24 18:49

 学习一下~谢谢lz分享

vethenc 发表于 2020-7-24 18:57

感谢分享

1983 发表于 2020-7-24 19:05

powehi777 发表于 2020-7-24 18:42
这是我写的,嘻嘻
import re
import requests


如果带上代码的效果和作用截图就更好了
页: [1] 2 3 4
查看完整版本: python爬取百度图库多张图片