python 图片爬虫

1.从网站找规律

爬虫图片源

 F12-->network-->XHR,然后图片往下拉,XHR下会出现请求内容,点击进入Header找url请求规律

2.具体下载代码如下

#!/usr/bin/env Python
# coding=utf-8

import json
import itertools
import urllib
import requests
import os
import re
import sys

# 生成网址列表
def buildUrls(word):
    word = urllib.parse.quote(word)
    url = r"https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word={word}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn={pn}&rn=30&gsm=78&1524745446180="
    urls = (url.format(word=word, pn=x*30) for x in range(60))
    return urls
# 解析JSON获取图片URL
re_url = re.compile(r'"thumbURL":"(.*?)"')

def resolveImgUrl(html):
    imgUrls = re_url.findall(html)
    return imgUrls


def downImg(imgUrl, dirpath, imgName):
    filename = os.path.join(dirpath, imgName)
    try:
        res = requests.get(imgUrl, timeout=15)
        if str(res.status_code)[0] == "4":
            print(str(res.status_code), ":", imgUrl)
            return False
    except Exception as e:
        print(" This is Exception:", imgUrl)
        print(e)
        return False
    with open(filename, "wb") as f:
        f.write(res.content)
    return True


def mkDir(dirName):
    dirpath = os.path.join(sys.path[0], dirName)
    if not os.path.exists(dirpath):
        os.mkdir(dirpath)
    return dirpath


if __name__ == '__main__':

    word = '鸟类'

    dirpath = mkDir("D:/getdata/down/baidu/"+word)

    urls = buildUrls(word)
    index = 0
    for url in urls:
        print("requesting:", url)
        html = requests.get(url, timeout=10).content.decode('utf-8')
        imgUrls = resolveImgUrl(html)
        if len(imgUrls) == 0:  # 没有图片则结束
            break
        for url in imgUrls:
            if downImg(url, dirpath, "baidu"+str(index) + ".jpg"):
                index += 1
                print("Downloaded %s picture" % index)

bingying爬虫

import requests
from bs4 import BeautifulSoup
import json
import eventlet
import os

urlshu = 1      #url中first = urlshu
pictureshu = 1  #图片下载时的名字(加上异常图片的第几张图片)
soupshu = 0     #每35张soup列表中第soupshu个
whileshu = 35   #用于while循环的数(因为每个页面35张图片)
save_path = 'E:\Learn\data\Crawlerdata_people\\'    #图片保存路径
if os.path.exists(save_path) == False:
    os.mkdir(save_path)    #创建文件夹'图片'

url1 = 'https://cn.bing.com/images/async?q='
url2 = '&first=%d&count=35&cw=1177&ch=737&relp=35&tsc=ImageBasicHover&datsrc=I&layout=RowBased&mmasync=1'
head1 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64'
    }
#有35张图片的网页的请求标头

head2 = {
'Cookie': 'Hm_lvt_d60c24a3d320c44bcd724270bc61f703=1624084633,1624111635',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64'
    }
#具体图片的网页的请求标头

print('请输入查找内容:')
content = input()
print('请输入查找图片数量:')
number = int(input())
url = url1 + content + url2 #合并成去往有35张图片的网址

while whileshu:
    r0 = requests.get(url%urlshu,headers = head1).text  #发送get请求并将内容转化成文本
    soup = BeautifulSoup(r0,features="lxml").find_all('a','iusc')   #解析r0并找到a和class=iusc的标签
    data = str(soup[soupshu].get('m'))  #将列表soup的第soupshu位中的m提取出来
    zidian = json.loads(data)   #将data转化成字典形式
    ifopen = 1      #用于下方判断是否下载图片
    with eventlet.Timeout(1,False):     #设定1秒的超时判断
        try:
            picture = requests.get(zidian['murl'],headers = head2).content  #发送get请求并返回二进制数据
        except:
            print('图片%d超时异常'%pictureshu)    #说明图片异常
            ifopen = 0      #取消下载此图片,否则会一直卡着然后报错
    while ifopen == 1:
        text = open(save_path + '%d'%pictureshu + '.jpg','wb')  #将图片下载至文件夹'图片'中
        text.write(picture)     #上行代码中'wb'为写入二进制数据
        text.close()
        ifopen = 0
        number = number - 1
        
    pictureshu = pictureshu + 1
    soupshu = soupshu + 1
    whileshu = whileshu - 1
    
    if whileshu == 0:   #第一页图片下载完成,将网址的first进1
        urlshu = urlshu + 1
        whileshu = 35
        soupshu = 0
        
    if number == 0:     #下载图片数量达标,退出循环
        break

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
基于Python Scrapy实现的蜂鸟数据采集爬虫系统 含代理、日志处理和全部源代码等 import scrapy from fengniao.items import FengniaoItem from scrapy.spidermiddlewares.httperror import HttpError from twisted.internet.error import TimeoutError, TCPTimedOutError, DNSLookupError, ConnectionRefusedError class FengniaoclawerSpider(scrapy.Spider): name = 'fengniaoClawer' allowed_domains = ['fengniao.com'] # 爬虫自定义设置,会覆盖 settings.py 文件中的设置 custom_settings = { 'LOG_LEVEL': 'DEBUG', # 定义log等级 'DOWNLOAD_DELAY': 0, # 下载延时 'COOKIES_ENABLED': False, # enabled by default 'DEFAULT_REQUEST_HEADERS': { # 'Host': 'www.fengniao.com', 'Referer': 'https://www.fengniao.com', }, # 管道文件,优先级按照由小到大依次进入 'ITEM_PIPELINES': { 'fengniao.pipelines.ImagePipeline': 100, 'fengniao.pipelines.FengniaoPipeline': 300, }, # 关于下载图片部分 'IMAGES_STORE': 'fengniaoPhoto', # 没有则新建 'IMAGES_EXPIRES': 90, # 图片有效期,已经存在的图片在这个时间段内不会再下载 'IMAGES_MIN_HEIGHT': 100, # 图片最小尺寸(高度),低于这个高度的图片不会下载 'IMAGES_MIN_WIDTH': 100, # 图片最小尺寸(宽度),低于这个宽度的图片不会下载 # 下载中间件,优先级按照由小到大依次进入 'DOWNLOADER_MIDDLEWARES': { 'fengniao.middlewares.ProxiesMiddleware': 400, 'fengniao.middlewares.HeadersMiddleware': 543, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, }, 'DEPTH_PRIORITY': 1, # BFS,是以starts_url为准,局部BFS,受CONCURRENT_REQUESTS影响 'SCHEDULER_DISK_QUEUE': 'scrapy.squeues.PickleFifoDiskQueue', 'SCHEDULER_MEMORY_QUEUE': 'scrapy.squeues.FifoMemoryQueue', 'REDIRECT_PRIORITY_ADJUST': 2, # Default: +2 'RETRY_PRIORITY_ADJUST': -1, # Default: -1 'RETRY_TIMES': 8, # 重试次数 # Default: 2, can also be specified per-request using max_retry_times attribute of Request.meta 'DOWNLOAD_TIMEOUT': 30, # This timeout can be set per spider using download_timeout spider attribute and per-request using download_timeout Request.meta key # 'DUPEFILTER_CLASS': "scrapy_redis.dupefilter.RFPDupeFilter", # 'SCHEDULER': "scrapy_redis.scheduler.Scheduler", # 'SCHEDULER_PERSIST': False, # Don't cleanup red
Linux Python 图片爬虫工具是一种用于在Linux操作系统上编写并执行的Python脚本,用于从网站上自动下载和保存图片数据。下面我将解释这个工具的功能和使用。 首先,该工具利用Python的功能强大和灵活性,通过使用第三方库(如BeautifulSoup和requests)从指定的网页上获取图片的URL地址。然后,它使用这些URL地址通过HTTP请求下载图片,并将其保存到本地文件系统中。 要使用这个工具,您需要在Linux操作系统上安装Python解释器以及所需的第三方库。然后,您可以编写一个Python脚本来实现图片爬取功能。脚本可以包括以下步骤: 1. 导入所需的Python库:例如,导入BeautifulSoup库用于解析网页内容,导入requests库用于发送HTTP请求。 2. 指定目标网页的URL:您可以将一个或多个网页链接作为输入。 3. 使用requests库发送HTTP请求并获取网页内容。 4. 使用BeautifulSoup库解析网页内容,并提取所有图片的URL地址。 5. 使用requests库发送HTTP请求并下载图片。您可以指定下载图片的保存路径和文件名。 6. 重复步骤3至5,直到所有图片都被下载。 7. 关闭脚本并退出。 该工具具有以下优点:免费、开源且跨平台。它可以应用于各种Web爬虫任务,如图像集合、数据采集等。此外,Python编程语言使得脚本编写和调试相对容易。 然而,请注意在使用这个工具时要遵守法律和道德规范,尊重网站所有者的权益,并尽可能避免过度请求服务器,以避免对目标网站造成不必要的负担。 总之,Linux Python 图片爬虫工具是一个功能强大且易于使用的工具,可以帮助您自动下载和保存网站上的图片数据。通过学习和掌握Python编程,您可以自定义和扩展此工具以满足各种需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AICVer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值