python 爬虫禁止访问解决方法(403)

2023-05-16

  • 1.增加Header
  • 2.代理IP
  • 3.终极方法
  • 4.实例练习

  • 5.更多思考

在上一篇博客中说到,程序使用一段时间后会遇到HTTP Error 403: Forbidden错误。 因为在短时间内直接使用Get获取大量数据,会被服务器认为在对它进行攻击,所以拒绝我们的请求,自动把电脑IP封了。 解决这个问题有两种方法。一是将请求加以包装,变成浏览器请求模式,而不再是“赤裸裸”的请求。 但有时服务器是根据同一IP的请求频率来判断的,即使伪装成不同浏览器。由于是同一IP访问,还是会被封。 所以就有了第二种方法,就是降低请求频率。具体说来也有两种方法。一种是在每次请求时暂停短暂时间,从而降低请求频率。 第二种是使用不同的IP进行访问。显然第一种方法不是最佳选择。 因为我们并不希望下载太慢,尤其是在请求次数很多时。当然如果间隔很短时间,从感官上并无差别,如0.1秒。 但对于服务器而言频率就降低了很多。 所以这是一种最安全可靠的办法,尽管我们并不想用它。第二种方法也就是使用代理IP。下面逐一介绍。

1.增加Header

在浏览谷歌地图时会发现,浏览了大量数据依然没有被封IP,但程序中我们只下了几百张瓦片, 就被封了。主要原因是我们是直接Get请求数据,而浏览器的请求是有Header的。 基于这一点,把请求伪装成浏览器请求,就可以解决这个问题了。 代码如下:

# coding=utf-8
import urllib2 as ulb
import numpy as np
import PIL.ImageFile as ImageFile
import cv2
import random

# 收集到的常用Header
my_headers = [
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14",
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
    'Opera/9.25 (Windows NT 5.1; U; en)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
    'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
    'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "
]


# 获取影像数据
def getImage(url):
    # 用urllib2库链接网络图像
    response = ulb.Request(url)

    # 随机选择一个Header伪装成浏览器
    response.add_header('User-Agent', random.choice(my_headers))

    # 打开网络图像文件句柄
    fp = ulb.urlopen(response)

    # 定义图像IO
    p = ImageFile.Parser()

    # 开始图像读取
    while 1:
        s = fp.read(1024)
        if not s:
            break
        p.feed(s)

    # 得到图像
    im = p.close()

    # 将图像转换成numpy矩阵
    arr = np.array(im)

    # 将图像RGB通道变成BGR通道,用于OpenCV显示
    pic = np.zeros(arr.shape, np.uint8)
    pic[:, :, 0] = arr[:, :, 2]
    pic[:, :, 1] = arr[:, :, 1]
    pic[:, :, 2] = arr[:, :, 0]

    return pic


img = getImage('http://static.fuwo.com/upload/attachment/1601/08/bea48ebeb5a811e58e9e00163e00254c.jpg')
cv2.imshow('image', img)
cv2.waitKey(0)

如下所示,获取到的网络上的图片:但有时这样的做法也不一定有用。前面也说到,服务器是根据IP判断。 给请求增加Header只是伪装成不同的浏览器而已。如果同一个IP在短时间内频繁访问, 就算是浏览器请求也会被拒绝掉。因此对于这个问题就只好从另一个方面着手,即适当降低单个IP访问频率。 对于每个IP而言,每次请求操作之间都暂停一段时间。同时利用多个IP进行访问。通过这两种手段可以降低被拒绝的可能性。

2.代理IP

简单地说是通过自动更换不同IP来“迷惑”服务器,让它认为是来自不同电脑的访问请求, 从而不会被拒绝掉。由于代理IP的时效性很强,所以需要经常更换。最好是“现用现找”。代码如下:

# coding=utf-8
import urllib2 as ulb
import numpy as np
import PIL.ImageFile as ImageFile
import cv2
import random

# 免费代理IP不能保证永久有效,如果不能用可以更新
# http://www.goubanjia.com/
proxy_list = [
    '183.95.80.102:8080',
    '123.160.31.71:8080',
    '115.231.128.79:8080',
    '166.111.77.32:80',
    '43.240.138.31:8080',
    '218.201.98.196:3128'
]


# 获取影像数据
def getImage(url):
    # 随机从IP列表中选择一个IP
    proxy = random.choice(proxy_list)
    # 基于选择的IP构建连接
    urlhandle = ulb.ProxyHandler({'http': proxy})
    opener = ulb.build_opener(urlhandle)
    ulb.install_opener(opener)

    # 用urllib2库链接网络图像
    response = ulb.Request(url)

    # 打开网络图像文件句柄
    fp = ulb.urlopen(response)

    # 定义图像IO
    p = ImageFile.Parser()

    # 开始图像读取
    while 1:
        s = fp.read(1024)
        if not s:
            break
        p.feed(s)

    # 得到图像
    im = p.close()

    # 将图像转换成numpy矩阵
    arr = np.array(im)

    # 将图像RGB通道变成BGR通道,用于OpenCV显示
    pic = np.zeros(arr.shape, np.uint8)
    pic[:, :, 0] = arr[:, :, 2]
    pic[:, :, 1] = arr[:, :, 1]
    pic[:, :, 2] = arr[:, :, 0]

    return pic


img = getImage('http://mt2.google.cn/vt/lyrs=s&hl=zh-CN&gl=CN&x=214345&y=107714&z=18')
cv2.imshow('image', img)
cv2.waitKey(0)

在之前由于过多使用,导致本机IP被封,所以无法访问Google地图瓦片,出现如下提示。运行这段代码后,就可以成功获取瓦片,如下所示:这样就成功解决访问瓦片403问题了。 至于在哪找免费的代理IP,可以点击这里。代码列表中的IP就是在这里找的。 网站中还有更多付费的高级功能,如果有需要也可以购买。这里只是简单测试,就不买了。

3.终极方法

说了上面两种方法后,很自然地就会想到把两种方法结合起来。这样就会大大提高请求的种类。 如在下面的代码中Header有13个,IP有6个,排列组合就有78中请求。从理论上来说, 组合数越多就越不容易被封。同时再加上请求延迟,是较好的解决方案。

# coding=utf-8
import urllib2 as ulb
import numpy as np
import PIL.ImageFile as ImageFile
import cv2
import random
import time

# 免费代理IP不能保证永久有效,如果不能用可以更新
# http://www.goubanjia.com/
proxy_list = [
    '183.95.80.102:8080',
    '123.160.31.71:8080',
    '115.231.128.79:8080',
    '166.111.77.32:80',
    '43.240.138.31:8080',
    '218.201.98.196:3128'
]

# 收集到的常用Header
my_headers = [
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14",
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
    'Opera/9.25 (Windows NT 5.1; U; en)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
    'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
    'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "
]


# 获取影像数据
def getImage(url):
    # 设置暂停时间为0.1秒
    t = 0.1
    time.sleep(t)

    # 随机从列表中选择IP、Header
    proxy = random.choice(proxy_list)
    header = random.choice(my_headers)

    print proxy, header

    # 基于选择的IP构建连接
    urlhandle = ulb.ProxyHandler({'http': proxy})
    opener = ulb.build_opener(urlhandle)
    ulb.install_opener(opener)

    # 用urllib2库链接网络图像
    response = ulb.Request(url)

    # 增加Header伪装成浏览器
    response.add_header('User-Agent', header)

    # 打开网络图像文件句柄
    fp = ulb.urlopen(response)

    # 定义图像IO
    p = ImageFile.Parser()

    # 开始图像读取
    while 1:
        s = fp.read(1024)
        if not s:
            break
        p.feed(s)

    # 得到图像
    im = p.close()

    # 将图像转换成numpy矩阵
    arr = np.array(im)

    # 将图像RGB通道变成BGR通道,用于OpenCV显示
    pic = np.zeros(arr.shape, np.uint8)
    pic[:, :, 0] = arr[:, :, 2]
    pic[:, :, 1] = arr[:, :, 1]
    pic[:, :, 2] = arr[:, :, 0]

    return pic


img = getImage('http://mt2.google.cn/vt/lyrs=s&hl=zh-CN&gl=CN&x=214345&y=107714&z=18')
cv2.imshow('image', img)
cv2.waitKey(0)

上述代码中,将每一次使用的代理IP、Header都输出到了控制台中,利用for循环连续获取15次。 输出的结果如下:在上述代码中使用了请求伪装、代理IP和请求延迟。 可以看到效果很好,15次请求都没有被拒绝。以上这些手段只是增加了不被服务器拒绝的概率, 并不代表一定会成功。但相比于不加任何处理的请求,成功几率高很多。

4.实例练习

在上篇博客中编写了获取瓦片小程序。这里在此基础上进行扩展,实现批量下载某区域瓦片功能。

# coding=utf-8
import urllib2 as ulb
import numpy as np
import PIL.ImageFile as ImageFile
import cv2
import math
import random
import time

# 免费代理IP不能保证永久有效,如果不能用可以更新
# http://www.goubanjia.com/
proxy_list = [
    '183.95.80.102:8080',
    '123.160.31.71:8080',
    '115.231.128.79:8080',
    '166.111.77.32:80',
    '43.240.138.31:8080',
    '218.201.98.196:3128'
]

# 收集到的常用Header
my_headers = [
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14",
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
    'Opera/9.25 (Windows NT 5.1; U; en)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
    'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
    'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "
]


def getTile(url):
    # 每次执行前先暂停t秒
    time.sleep(t)

    # 随机选择IP、Header
    proxy = random.choice(proxy_list)
    header = random.choice(my_headers)

    print proxy, 'sleep:', t, header

    # 基于选择的IP构建连接
    urlhandle = ulb.ProxyHandler({'http': proxy})
    opener = ulb.build_opener(urlhandle)
    ulb.install_opener(opener)

    # 用urllib2库链接网络图像
    response = ulb.Request(url)

    # 增加Header伪装成浏览器
    response.add_header('User-Agent', header)

    try:
        # 打开网络图像文件句柄
        fp = ulb.urlopen(response)

        # 定义图像IO
        p = ImageFile.Parser()

        # 开始图像读取
        while 1:
            s = fp.read(1024)
            if not s:
                break
            p.feed(s)

        # 得到图像
        im = p.close()

        # 将图像转换成numpy矩阵
        arr = np.array(im)
        return arr

    except ulb.HTTPError, e:
        print e.code, e.reason

        # 遇到异常返回256*256的黑色图片
        arr = np.zeros((256, 256, 3), np.uint8)
        return arr


# 由x、y、z计算瓦片行列号
def calcXY(lat, lon, z):
    x = math.floor(math.pow(2, int(z) - 1) * ((lon / 180.0) + 1))
    tan = math.tan(lat * math.pi / 180.0)
    sec = 1.0 / math.cos(lat * math.pi / 180.0)
    log = math.log(tan + sec)
    y = math.floor(math.pow(2, int(z) - 1) * (1 - log / math.pi))
    return int(x), int(y)


# 字符串度分秒转度
def cvtStr2Deg(deg, min, sec):
    result = int(deg) + int(min) / 60.0 + float(sec) / 3600.0
    return result


# 获取经纬度
def getNum(str):
    split = str.split(',')
    du = split[0].split('°')[0]
    fen = split[0].split('°')[1].split('\'')[0]
    miao = split[0].split('°')[1].split('\'')[1].split('"')[0]
    split1 = cvtStr2Deg(du, fen, miao)
    du = split[1].split('°')[0]
    fen = split[1].split('°')[1].split('\'')[0]
    miao = split[1].split('°')[1].split('\'')[1].split('"')[0]
    split2 = cvtStr2Deg(du, fen, miao)
    return split1, split2


# 获取经纬度
def getNum2(str):
    split = str.split(',')
    split1 = float(split[0].split('N')[0])
    split2 = float(split[1].split('E')[0])
    return split1, split2


# 用户输入更新后的IP文件,如果没有则用代码中的默认IP
ip_path = raw_input("Input the path of IP list file(input \'no\' means use default IPs):\n")
# 判断是否输入IP文件
if ip_path != 'no':
    proxy_list = []
    file = open(ip_path)
    lines = file.readlines()
    for line in lines:
        proxy_list.append(line.strip('\n'))
    print proxy_list.__len__(), 'IPs are loaded.'

# 输入两次请求间的暂停时间
t = 0.1
t = input("Input the interval time(second) of requests(e.g. 0.1):\n")

# 输入影像层数
z = 18
z = raw_input("Input image level(0-18):\n")

# 输入左上角点经纬度并计算行列号
lt_raw = raw_input("Input lat & lon at left top(e.g. 30.52N,114.36E):\n")
lt_lat, lt_lon = getNum2(lt_raw)
lt_X, lt_Y = calcXY(lt_lat, lt_lon, z)

# 输入右下角点经纬度并计算行列号
rb_raw = raw_input("Input lat & lon at right bottom(e.g. 30.51N,114.37E):\n")
rb_lat, rb_lon = getNum2(rb_raw)
rb_X, rb_Y = calcXY(rb_lat, rb_lon, z)

# 计算行列号差值及瓦片数
cols = rb_X - lt_X
rows = rb_Y - lt_Y
tiles = cols * rows
count = 0

# 判断结果是否合理
if tiles <= 0:
    print 'Please check your input.'
    exit()
print tiles.__str__() + ' tiles will be downloaded.'

# 输入保存路径
base = raw_input("Input save path:\n")

print 'Now start...'

# 循环遍历,下载瓦片
for i in range(rows):
    for j in range(cols):
        # 拼接url
        url = 'http://mt2.google.cn/vt/lyrs=s&hl=zh-CN&gl=CN&x=' + (j + lt_X).__str__() + '&y=' + (
            i + lt_Y).__str__() + '&z=' + z.__str__()
        # 拼接输出路径
        path = base + '\\' + z.__str__() + '_' + (j + lt_X).__str__() + '_' + (i + lt_Y).__str__() + '.jpg'
        # 获取瓦片
        tile = getTile(url)
        # 保存瓦片
        cv2.imwrite(path, tile)
        # 计数变量增加
        count = count + 1
        # 输出进度信息
        print (round((float(count) / float(tiles)) * 100, 2)).__str__() + " % finished"

运行程序如下所示。按照提示依次输入IP文件路径、请求暂停时间、影像层数、西北角经纬度、东南角经纬度以及输出影像路径。程序便会自动下载。同时会显示请求每一个瓦片用的IP、Header、SleepTime以及进度。下载完成后的瓦片如下图所示。输入的IP地址文件如下所示,每一行为一个IP地址。这些IP地址可以在上面说到的那个网站上找。最后输出成exe进行了测试,可以正常使用。exe点击这里下载,密码:oiai。

5.更多思考

在上面的程序中,我们下载了30.52N,114.36E - 30.51N,114.37E范围的18级瓦片,一共是63张。 如果要下载整个中国国境的18级瓦片,输入角点经纬度,计算得到如下结果:一共有接近15亿张瓦片!几乎全国每个人有一张。经过统计,平均一个瓦片最小在20KB左右。 按照20KB计算,要存储全国的18级影像数据一共需要24TB。如果算上前17级,那就更是个“天文数字”了。 于是感叹那些WMTS服务的服务器确实很强。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 爬虫禁止访问解决方法(403) 的相关文章

  • C++ split基本操作

    源代码 xff1a void split const string amp s char delim vector lt string gt amp elems stringstream ss s string item while get
  • VSLAM学习之(一)

    相关资料整理 CVPR 2014 Visual SLAM Tutorial 学习SLAM需要哪些预备知识 VSLAM简介 VSLAM xff08 Visual Simultaneous Localization and Mapping xf
  • 一本书,让我走上编程之路

    好多年了 xff0c 我的书架上一直留着这本书 xff0c 不是因为有多好 xff0c 而是它让我明白了许多 工作后的我读过无数本厚厚薄薄的书 xff0c 其中有的确实十分精彩 但唯一让我真正用心读过的 xff0c 是大学期间一本普通的c
  • ubuntu虚拟机终端(terminal)打不开

    最近想用cmake gui编译opencv xff0c 发现虚拟机上终端 xff08 terminal xff09 打不开 xff0c 点图标也打不开 xff0c ctrl 43 alt 43 t也没反应 然后百度了一下ctrl 43 al
  • Debian 用户名密码输入成功后重复登录

    问题描述 xff1a 在用户名和密码都输入成功的情况下 xff0c 重复出现登录界面 xff0c 无法进入主界面 问题原因 xff1a 原因为修改了 etc environment 环境变量 xff0c 在文件末尾添加了 xff1a PAT
  • C++最佳实践之常用库介绍

    C 43 43 的常用库包括 xff1a algorithm chrono iostream future memory map queue unordered map regex set string sstream stdexcept
  • Android GB905协议详解

    最近发现 xff0c 深圳做网约车和货车的协议的公司越来越多了 xff0c 之前在公司做过一些这方面的项目 就来写个这方面的文章记录下 xff0c 也顺便分享下 GB905 xff0c 主要是面向网约车的一种协议 xff0c 主要监控司机的
  • Python pip 命令清除Python包缓存文件

    Python pip 命令清除Python包缓存文件 命令行窗口中安装包命令调用方式示例 使用pip命令清除Python包缓存文件 命令行窗口中安装包命令 关于如何打开Windows 操作系统下的命令行窗口可以查看这篇 如何在Windows
  • hadoop集群搭建及其组件介绍和目录规划

    搭建HADOOP HA集群 集群角色分配 角色描述角色IP兼职兼职描述NN1NameNode节点ip nn1rmResourceManagerNN2NameNode节点ip nn2his serverJobHistoryServerJN1J
  • ubuntu12.04环境下Floodlight+mininet搭建OpenFlow测试平台

    注 xff1a 此笔记为在学习SDN相关知识时的个人总结 xff0c 如需转载麻烦表明出处 xff0c 并附上连接 xff08 http blog csdn net sherkyoung article details 23540017 x
  • DERBY数据库环境搭建以及简单使用

    1 derby数据库 Apache Derby 项目的目标是构建一个完全用 Java 编程语言编写的 易于使用却适合大多数应用程序的开放源码数据库 特点 xff1a l 程序小巧 xff0c 基础引擎和内嵌的JDBC 驱动总共大约 2MB
  • 如何做好项目各干系人的管理及应对?

    如何更好地识别 分析和管理项目关系人 xff1f 主要有以下几个方面 xff1a 1 项目干系人的分析 一般对项目干系人的分析有2种方法 xff0c 方法一 xff1a 权利 xff08 影响 xff09 xff0c 即对项目可以产生影响的
  • floodlight添加模块实验

    元旦的时候发现floodlight 居然更新了 xff0c 吓坏我了 V0 9 是 12 年 10 月更新的 xff0c 然后在 14 年 12 月 30 日连续发布了 V0 91 和 V1 0 OTZ 根据release note 来看
  • OpenFlow1.3协议解析

    注 xff1a 此笔记为在学习OpenFlow协议时的个人总结 xff0c 存在诸多错误和不完善的地方 xff0c 后续会陆续完善 xff0c 仅作参考 如需转载麻烦表明出处 xff0c 并附上连接 xff08 http blog csdn
  • [python]从零开始学python——颜色的16进制于RGB之间的转换

    在学习openstack的时候 xff0c 发现openstack是python开发的 xff1b 学习mininet自定义拓扑 xff0c 发现mininet是python开发的 xff1b 看看ryu xff0c 还是python开发的
  • ubuntu14.04 升级内核

    转载地址 xff1a http blog csdn net u011884290 article details 52082809 前两周升级了ubuntu 16 04 出现了关机卡死的情况 xff0c 查了下可能是系统内核 xff08 4
  • linux firefox提示“firefox is already running”的解决方法

    背景解决方法 背景 linux下 xff0c 多用户通过vnc访问指定IP xff0c 比如192 168 2 94 不同用户执行firefox xff0c firefox进程存在且仅能存在一个 记录一下 xff0c 以备不时之需 解决方法
  • 论C++类对象赋值

    class Demo public Demo Demo int j cout lt lt 34 Demo int 34 lt lt j lt lt endl this gt i 61 j Demo const Demo amp d cout
  • gnuradio+b210实现FM收音机

    gnuradio 43 b210实现FM收音机 环境介绍FM接收1 Flow Graph2 变量参数 FM发射1 Flow Graph2 变量参数 环境介绍 NameVersiongnuradio3 7 14 0uhd3 15 0 0ubu
  • 图深度学习 Deep Learning on Graph

    深度学习在图上的应用 引言图神经网络图卷积网络卷积操作谱方法Efficiency AspectMultiple Graphs Aspect框架 Readout 操作改进与讨论注意力机制残差和跳跃连接 Residual and Jumping

随机推荐

  • Ubuntu16.04中文输入法安装初战

    最近刚给笔记本装了Ubuntu 43 win10双系统 xff0c 但是ubuntu16 04没有自带中文输入法 xff0c 所以经过网上的一些经验搜索整合 xff0c 分享一下安装中文输入法的心得 本文主要介绍了谷歌拼音跟ibus中文输入
  • GoDaddy与Namecheap域名注册商对比分析

    默默鸟已经有几天没有更新博客 xff0c 博客更新的少是因为我必须在更新之前想好了围绕博客的主题更新 xff0c 而不是想到哪个就更新哪些内容 xff0c 一来可能不符合博客的中心 xff0c 二来对于用户群也有影响 xff0c 同事显得不
  • ubuntu18安装vnc远程桌面服务

    安装 vnc4server xff0c xfce4 sudo apt install vnc4server xfce4 xfce4 goodies 安装完成后配置VNC登录密码 vncpasswd 启动VNC server vncserve
  • 国内国外常用的10个云服务器可视化管理面板

    如今无论是搭建网站 xff0c 还是部署小程序 xff0c 甚至一些企业应用都会用到云服务求或者独立服务器 对于很多希望利用网站 网络创业的 xff0c 也会用到服务器 xff0c 不过在使用服务器过程中 xff0c 我们对于服务器环境的配
  • 几个Windows强力卸载工具软件推荐

    对于我们有在使用Windows系统的时候 xff0c 是不是会主动或者被动的安装一些软件和插件工具 殊不知日积月累之后 xff0c 系统中的软件会越来越多 xff0c 甚至有很多我们安装几个月甚至几年都不会用到的 这些软件 xff0c 其实
  • 几款值得选的SSH客户端软件

    对于服务器运维工作来说 xff0c 我们少不了SSH远程客户端管理工具 我们在用哪款呢 xff1f 比如常见用的包括PuTTY XShell WindTerm等 xff0c 有很多的付费或者免费的 xff0c 既然有这么多免费且好用的为什么
  • 原生态Ubuntu部署LAMP环境 PHP8.1+MySQL+Apache

    如果我们部署WEB环境用于网站项目 xff0c 我们还是建议用成熟的一键包或者可视化面板这种 xff0c 毕竟软件的部署和后续的运维方便很多 但是 xff0c 如果我们有需要学习Linux环境的原理 xff0c 那还是要学会原生态部署软件的
  • Passwork适合多人协作团队的自建密码管理器

    如今互联网已经深入我们的工作和生活中 xff0c 从办公 购物 学习每天都会用到各种网站平台 各种APP客户端 各种软件账户 xff0c 这就离不开对各个平台账户的管理 我们应该也知道 xff0c 账户的安全是至关重要的 xff0c 如果账
  • 完整利用Rsync实现服务器/网站数据增量同步备份

    我们在选择VPS 服务器架设项目之后 xff0c 所有的项目 网站数据都需要我们自行备份和维护 xff0c 即便有些服务商有提供管理型服务器 xff0c 但是数据自行备份和管理才是较为靠谱的 无论是网站 xff0c 还是其他项目 xff0c
  • 整理Nginx/Apache服务器配置HTTPS SSL证书示范教程

    昨天我们看到百度发布 34 百度烽火算法升级 34 xff0c 提到网站如果被劫持或者拦截可能会降低网站的权重和排名等问题 这使得我们网站需要使用HTTPS SSL证书来减少被拦截劫持的风险 其实在早些时候我们已经看到很多浏览器都强制要求网
  • 6个免费DNS解析服务商评测分析 适用于网站域名解析应用

    这几天我们很多网友应该知道CloudXNS DNS解析服务商预计7月15日会宣布停止提供免费解析服务而主营商业服务 虽然网络上提供免费DNS解析服务商很多 xff0c 但是毕竟这么多年CloudXNS域名解析稳定性还是不错的 xff0c 而
  • 两种方法修改数据库myslq密码

    搞了很久终于修改数据库密码成功了 命令行修改root密码 xff1a mysql gt UPDATE mysql user SET password 61 PASSWORD 新密码 WHERE User 61 root mysql gt F
  • 关于学生课堂行为识别算法

    目前基于针对学校做了一款考生行为识别算法 xff0c 算法可以在服务器部署 xff0c 也可以在前端设备如Jetson RK等边缘设备运行 xff0c 目前算法已经投入使用 xff0c 算法效果如下 目前算法在 2080Ti 服务器运行效率
  • 获取imagefield 类型图片的路径

    绝对路径 request build absolute uri 图片 url 相对路径 图片 url
  • mmdetection 常用命令

    1 多卡训练 CUDA VISIBLE DEVICES 61 0 1 2 3 PORT 61 15200 tool dist train py configs py 4 2 普通测试 python tools test py configs
  • yolov5 导出onnx 忽略检测层

    def forward self x z 61 inference output for i in range self nl x i 61 self m i x i conv bs ny nx 61 x i shape x bs 255
  • python opencv 添加运动模糊

    在训练过程中增加 运动模糊 class MotionBlur object def init self p 61 0 5 degree 61 5 angle 61 45 self p 61 p self degree 61 degree s
  • pth 多类模型改成一类模型

    import torch import copy def change pth input pth out pth model dir 61 input pth checkpoint 61 torch load model dir mode
  • 使用opencv进行车牌提取及识别

    商业合作可联系 xff1a 547691062 64 qq com 目录 1车牌提取过程 1 1车辆图像获取1 2车牌定位1 3车牌字符分割2车牌提取 2 1灰度化2 2Candy边缘检测2 3形态学 xff08 膨胀腐蚀 xff09 处理
  • python 爬虫禁止访问解决方法(403)

    1 增加Header2 代理IP3 终极方法4 实例练习 5 更多思考 在上一篇博客中说到 xff0c 程序使用一段时间后会遇到HTTP Error 403 Forbidden错误 因为在短时间内直接使用Get获取大量数据 xff0c 会被