最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python訪問(wèn)純真IP數(shù)據(jù)庫(kù)的代碼

 更新時(shí)間:2011年05月19日 01:10:48   投稿:mdxy-dxy  
項(xiàng)目中有這樣的需求,通過(guò)IP地址判斷客戶端是網(wǎng)通的還是電信的。從同事那拿了個(gè)純文本的IP純真數(shù)據(jù)庫(kù),用Python寫(xiě)了一個(gè)小程序,感覺(jué)挺好的。

核心代碼:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from bisect import bisect 

_LIST1, _LIST2 = [], [] 
_INIT = False 

ip2int = lambda ip_str: reduce(lambda a, b: (a << 8) + b, [int(i) for i in ip_str.split('.')]) 

def _init(): 
global _LIST, _INIT 
if not _INIT: 
for l in open('ipdata.txt', 'rb'): 
ip1, ip2 = l.split()[:2] 
addr = ' '.join(l.split()[2:]) 
ip1, ip2 = ip2int(ip1), ip2int(ip2) 
_LIST1.append(ip1) 
_LIST2.append((ip1, ip2, addr)) 
_INIT = True 

def ip_from(ip): 
_init() 
i = ip2int(ip) 
idx = bisect(_LIST1, i) 
assert(idx > 0) 
if len(_LIST1) <= idx: 
return u'unknown ip address %s' % ip 
else: 
frm, to ,addr = _LIST2[idx - 1] 
if frm <= i <= to: 
return addr 
else: 
return u'unknown ip address %s' % ip 

if __name__ == '__main__': 
print ip_from('115.238.54.106') 
print ip_from('220.181.29.160') 
print ip_from('115.238.54.107') 
print ip_from('8.8.8.8')

代碼打包下載 http://xiazai.jb51.net/201105/yuanma/ipaddress.7z

接下來(lái)為大家分享更完美的代碼:

#!/usr/bin/env python
# coding: utf-8
 
'''用Python腳本查詢(xún)純真IP庫(kù)
 
QQWry.Dat的格式如下:
 
+----------+
| 文件頭 | (8字節(jié))
+----------+
| 記錄區(qū) | (不定長(zhǎng))
+----------+
| 索引區(qū) | (大小由文件頭決定)
+----------+
 
文件頭:4字節(jié)開(kāi)始索引偏移值+4字節(jié)結(jié)尾索引偏移值
 
記錄區(qū): 每條IP記錄格式 ==> IP地址[國(guó)家信息][地區(qū)信息]
 
  對(duì)于國(guó)家記錄,可以有三種表示方式:
 
    字符串形式(IP記錄第5字節(jié)不等于0x01和0x02的情況),
    重定向模式1(第5字節(jié)為0x01),則接下來(lái)3字節(jié)為國(guó)家信息存儲(chǔ)地的偏移值
    重定向模式(第5字節(jié)為0x02),
 
  對(duì)于地區(qū)記錄,可以有兩種表示方式: 字符串形式和重定向
 
  最后一條規(guī)則:重定向模式1的國(guó)家記錄后不能跟地區(qū)記錄
 
索引區(qū): 每條索引記錄格式 ==> 4字節(jié)起始IP地址 + 3字節(jié)指向IP記錄的偏移值
 
  索引區(qū)的IP和它指向的記錄區(qū)一條記錄中的IP構(gòu)成一個(gè)IP范圍。查詢(xún)信息是這個(gè)
  范圍內(nèi)IP的信息
 
'''
 
import sys
import socket
from struct import pack, unpack
 
class IPInfo(object):
  '''QQWry.Dat數(shù)據(jù)庫(kù)查詢(xún)功能集合
  '''
  def __init__(self, dbname):
    ''' 初始化類(lèi),讀取數(shù)據(jù)庫(kù)內(nèi)容為一個(gè)字符串,
    通過(guò)開(kāi)始8字節(jié)確定數(shù)據(jù)庫(kù)的索引信息'''
 
    self.dbname = dbname
    # f = file(dbname, 'r')
 
    # Demon注:在Windows下用'r'會(huì)有問(wèn)題,會(huì)把\r\n轉(zhuǎn)換成\n
    # 詳見(jiàn)http://demon.tw/programming/python-open-mode.html
    # 還有Python文檔中不提倡用file函數(shù)來(lái)打開(kāi)文件,推薦用open
    f = open(dbname, 'rb')
 
    self.img = f.read()
    f.close()
 
    # QQWry.Dat文件的開(kāi)始8字節(jié)是索引信息,前4字節(jié)是開(kāi)始索引的偏移值,
    # 后4字節(jié)是結(jié)束索引的偏移值。
    # (self.firstIndex, self.lastIndex) = unpack('II', self.img[:8])
 
    # Demon注:unpack默認(rèn)使用的endian是和機(jī)器有關(guān)的
    # Intel x86和AMD64(x86-64)是little-endian
    # Motorola 68000和PowerPC G5是big-endian
    # 而純真數(shù)據(jù)庫(kù)全部采用了little-endian字節(jié)序
    # 所以在某些big-endian的機(jī)器上原代碼會(huì)出錯(cuò)
    (self.firstIndex, self.lastIndex) = unpack('<II', self.img[:8])
 
    # 每條索引長(zhǎng)7字節(jié),這里得到索引總個(gè)數(shù)
    self.indexCount = (self.lastIndex - self.firstIndex) / 7 + 1
 
  def getString(self, offset = 0):
    ''' 讀取字符串信息,包括"國(guó)家"信息和"地區(qū)"信息
 
    QQWry.Dat的記錄區(qū)每條信息都是一個(gè)以'\0'結(jié)尾的字符串'''
 
    o2 = self.img.find('\0', offset)
    #return self.img[offset:o2]
    # 有可能只有國(guó)家信息沒(méi)有地區(qū)信息,
    gb2312_str = self.img[offset:o2]
    try:
      utf8_str = unicode(gb2312_str,'gb2312').encode('utf-8')
    except:
      return '未知'
    return utf8_str
 
  def getLong3(self, offset = 0):
    '''QQWry.Dat中的偏移記錄都是3字節(jié),本函數(shù)取得3字節(jié)的偏移量的常規(guī)表示
    QQWry.Dat使用“字符串“存儲(chǔ)這些值'''
    s = self.img[offset: offset + 3]
    s += '\0'
    # unpack用一個(gè)'I'作為format,后面的字符串必須是4字節(jié)
    # return unpack('I', s)[0]
 
    # Demon注:和上面一樣,強(qiáng)制使用little-endian
    return unpack('<I', s)[0]
 
  def getAreaAddr(self, offset = 0):
    ''' 通過(guò)給出偏移值,取得區(qū)域信息字符串,'''
 
    byte = ord(self.img[offset])
    if byte == 1 or byte == 2:
      # 第一個(gè)字節(jié)為1或者2時(shí),取得2-4字節(jié)作為一個(gè)偏移量調(diào)用自己
      p = self.getLong3(offset + 1)
      return self.getAreaAddr(p)
    else:
      return self.getString(offset)
 
  def getAddr(self, offset, ip = 0):
    img = self.img
    o = offset
    byte = ord(img[o])
 
    if byte == 1:
      # 重定向模式1
      # [IP][0x01][國(guó)家和地區(qū)信息的絕對(duì)偏移地址]
      # 使用接下來(lái)的3字節(jié)作為偏移量調(diào)用字節(jié)取得信息
      return self.getAddr(self.getLong3(o + 1))
 
    if byte == 2:
      # 重定向模式2
      # [IP][0x02][國(guó)家信息的絕對(duì)偏移][地區(qū)信息字符串]
      # 使用國(guó)家信息偏移量調(diào)用自己取得字符串信息
      cArea = self.getAreaAddr(self.getLong3(o + 1))
      o += 4
      # 跳過(guò)前4字節(jié)取字符串作為地區(qū)信息
      aArea = self.getAreaAddr(o)
      return (cArea, aArea)
 
    if byte != 1 and byte != 2:
      # 最簡(jiǎn)單的IP記錄形式,[IP][國(guó)家信息][地區(qū)信息]
      # 重定向模式1有種情況就是偏移量指向包含國(guó)家和地區(qū)信息兩個(gè)字符串
      # 即偏移量指向的第一個(gè)字節(jié)不是1或2,就使用這里的分支
      # 簡(jiǎn)單地說(shuō):取連續(xù)取兩個(gè)字符串!
 
      cArea = self.getString(o)
      #o += 2*len(cArea) + 1
      # 我們已經(jīng)修改cArea為utf-8字符編碼了,len取得的長(zhǎng)度會(huì)有變,
      # 用下面方法得到offset
 
      o = self.img.find('\0',o) + 1
      aArea = self.getString(o)
      if aArea == "?":
        aArea = "電信"
      if aArea == "信":
        aArea = ""
      if aArea == "[":
        aArea = "聯(lián)通"
      return (cArea, aArea)
 
  def find(self, ip, l, r):
    ''' 使用二分法查找網(wǎng)絡(luò)字節(jié)編碼的IP地址的索引記錄'''
    if r - l <= 1:
      return l
 
    m = (l + r) / 2
    o = self.firstIndex + m * 7
    #new_ip = unpack('I', self.img[o: o+4])[0]
 
    # Demon注:和上面一樣,強(qiáng)制使用little-endian
    new_ip = unpack('<I', self.img[o: o+4])[0]
 
    if ip <= new_ip:
      return self.find(ip, l, m)
    else:
      return self.find(ip, m, r)
 
  def getIPAddr(self, ip):
    ''' 調(diào)用其他函數(shù),取得信息!'''
    # 使用網(wǎng)絡(luò)字節(jié)編碼IP地址
    ip = unpack('!I', socket.inet_aton(ip))[0]
    # 使用 self.find 函數(shù)查找ip的索引偏移
    i = self.find(ip, 0, self.indexCount - 1)
    # 得到索引記錄
    o = self.firstIndex + i * 7
    # 索引記錄格式是: 前4字節(jié)IP信息+3字節(jié)指向IP記錄信息的偏移量
    # 這里就是使用后3字節(jié)作為偏移量得到其常規(guī)表示(QQWry.Dat用字符串表示值)
    o2 = self.getLong3(o + 4)
    # IP記錄偏移值+4可以丟棄前4字節(jié)的IP地址信息。
    (c, a) = self.getAddr(o2 + 4)
    return (c, a)
 
  def output(self, first, last):
    for i in range(first, last):
      o = self.firstIndex + i * 7
      ip = socket.inet_ntoa(pack('!I', unpack('I', self.img[o:o+4])[0]))
      offset = self.getLong3(o + 4)
      (c, a) = self.getAddr(offset + 4)
      print "%s %d %s/%s" % (ip, offset, c, a)
def getIP(ip):
  import os
  _localDir=os.path.dirname(__file__)
  _curpath=os.path.normpath(os.path.join(os.getcwd(),_localDir))
  curpath=_curpath
  i = IPInfo(curpath+'/qqwry.dat')
  (c, a) = i.getIPAddr(ip)
  return c+a
def main():
  import os
  _localDir=os.path.dirname(__file__)
  _curpath=os.path.normpath(os.path.join(os.getcwd(),_localDir))
  curpath=_curpath
  i = IPInfo(curpath+'/qqwry.dat')
  if os.path.exists(sys.argv[1]):
    for line in open(sys.argv[1],"r").readlines():
      line = line.replace("\r","").replace("\n","")
      (c, a) = i.getIPAddr(line)
      # Demon注:如果是在Windows命令行中運(yùn)行把編碼轉(zhuǎn)回gb2312以避免亂碼
      if sys.platform == 'win32':
        c = unicode(c, 'utf-8').encode('gb2312')
        a = unicode(a, 'utf-8').encode('gb2312')
      print '%s %s/%s' % (line, c, a)
  else:
    (c, a) = i.getIPAddr(sys.argv[1])
    # Demon注:如果是在Windows命令行中運(yùn)行把編碼轉(zhuǎn)回gb2312以避免亂碼
    if sys.platform == 'win32':
      c = unicode(c, 'utf-8').encode('gb2312')
      a = unicode(a, 'utf-8').encode('gb2312')
    print '%s %s/%s' % (sys.argv[1], c, a)
 
if __name__ == '__main__':
  main()

用Python腳本查詢(xún)純真IP庫(kù)QQWry.dat(Demon修改版)

由于要用 Python 讀取一個(gè)和純真IP數(shù)據(jù)庫(kù) QQWry.dat 格式差不多的 IPv6 數(shù)據(jù)庫(kù),所以在網(wǎng)上搜索了一下,在 LinuxTOY 看到了一個(gè) Python 腳本,發(fā)現(xiàn)有一些小小的問(wèn)題,于是修改了一下。

#!/usr/bin/env python
# coding: utf-8

# from: http://linuxtoy.org/files/pyip.py
# Blog: http://linuxtoy.org/archives/python-ip.html
# Modified by Demon
# Blog: http://demon.tw/programming/python-qqwry-dat.html

'''用Python腳本查詢(xún)純真IP庫(kù)

QQWry.Dat的格式如下:

+----------+
| 文件頭 | (8字節(jié))
+----------+
| 記錄區(qū) | (不定長(zhǎng))
+----------+
| 索引區(qū) | (大小由文件頭決定)
+----------+

文件頭:4字節(jié)開(kāi)始索引偏移值+4字節(jié)結(jié)尾索引偏移值

記錄區(qū): 每條IP記錄格式 ==> IP地址[國(guó)家信息][地區(qū)信息]

  對(duì)于國(guó)家記錄,可以有三種表示方式:

    字符串形式(IP記錄第5字節(jié)不等于0x01和0x02的情況),
    重定向模式1(第5字節(jié)為0x01),則接下來(lái)3字節(jié)為國(guó)家信息存儲(chǔ)地的偏移值
    重定向模式(第5字節(jié)為0x02),
  
  對(duì)于地區(qū)記錄,可以有兩種表示方式: 字符串形式和重定向

  最后一條規(guī)則:重定向模式1的國(guó)家記錄后不能跟地區(qū)記錄

索引區(qū): 每條索引記錄格式 ==> 4字節(jié)起始IP地址 + 3字節(jié)指向IP記錄的偏移值

  索引區(qū)的IP和它指向的記錄區(qū)一條記錄中的IP構(gòu)成一個(gè)IP范圍。查詢(xún)信息是這個(gè)
  范圍內(nèi)IP的信息

'''

import sys
import socket
from struct import pack, unpack

class IPInfo(object):
  '''QQWry.Dat數(shù)據(jù)庫(kù)查詢(xún)功能集合
  '''
  def __init__(self, dbname):
    ''' 初始化類(lèi),讀取數(shù)據(jù)庫(kù)內(nèi)容為一個(gè)字符串,
    通過(guò)開(kāi)始8字節(jié)確定數(shù)據(jù)庫(kù)的索引信息'''
    
    self.dbname = dbname
    # f = file(dbname, 'r')

    # Demon注:在Windows下用'r'會(huì)有問(wèn)題,會(huì)把\r\n轉(zhuǎn)換成\n
    # 詳見(jiàn)http://demon.tw/programming/python-open-mode.html
    # 還有Python文檔中不提倡用file函數(shù)來(lái)打開(kāi)文件,推薦用open
    f = open(dbname, 'rb')

    self.img = f.read()
    f.close()

    # QQWry.Dat文件的開(kāi)始8字節(jié)是索引信息,前4字節(jié)是開(kāi)始索引的偏移值,
    # 后4字節(jié)是結(jié)束索引的偏移值。
    # (self.firstIndex, self.lastIndex) = unpack('II', self.img[:8])

    # Demon注:unpack默認(rèn)使用的endian是和機(jī)器有關(guān)的
    # Intel x86和AMD64(x86-64)是little-endian
    # Motorola 68000和PowerPC G5是big-endian
    # 而純真數(shù)據(jù)庫(kù)全部采用了little-endian字節(jié)序
    # 所以在某些big-endian的機(jī)器上原代碼會(huì)出錯(cuò)
    (self.firstIndex, self.lastIndex) = unpack('<II', self.img[:8])

    # 每條索引長(zhǎng)7字節(jié),這里得到索引總個(gè)數(shù)
    self.indexCount = (self.lastIndex - self.firstIndex) / 7 + 1
  
  def getString(self, offset = 0):
    ''' 讀取字符串信息,包括"國(guó)家"信息和"地區(qū)"信息

    QQWry.Dat的記錄區(qū)每條信息都是一個(gè)以'\0'結(jié)尾的字符串'''
    
    o2 = self.img.find('\0', offset)
    #return self.img[offset:o2]
    # 有可能只有國(guó)家信息沒(méi)有地區(qū)信息,
    gb2312_str = self.img[offset:o2]
    try:
      utf8_str = unicode(gb2312_str,'gb2312').encode('utf-8')
    except:
      return '未知'
    return utf8_str

  def getLong3(self, offset = 0):
    '''QQWry.Dat中的偏移記錄都是3字節(jié),本函數(shù)取得3字節(jié)的偏移量的常規(guī)表示
    QQWry.Dat使用“字符串“存儲(chǔ)這些值'''
    s = self.img[offset: offset + 3]
    s += '\0'
    # unpack用一個(gè)'I'作為format,后面的字符串必須是4字節(jié)
    # return unpack('I', s)[0]

    # Demon注:和上面一樣,強(qiáng)制使用little-endian
    return unpack('<I', s)[0]

  def getAreaAddr(self, offset = 0):
    ''' 通過(guò)給出偏移值,取得區(qū)域信息字符串,'''
    
    byte = ord(self.img[offset])
    if byte == 1 or byte == 2:
      # 第一個(gè)字節(jié)為1或者2時(shí),取得2-4字節(jié)作為一個(gè)偏移量調(diào)用自己
      p = self.getLong3(offset + 1)
      return self.getAreaAddr(p)
    else:
      return self.getString(offset)

  def getAddr(self, offset, ip = 0):
    img = self.img
    o = offset
    byte = ord(img[o])

    if byte == 1:
      # 重定向模式1
      # [IP][0x01][國(guó)家和地區(qū)信息的絕對(duì)偏移地址]
      # 使用接下來(lái)的3字節(jié)作為偏移量調(diào)用字節(jié)取得信息
      return self.getAddr(self.getLong3(o + 1))
    
    if byte == 2:
      # 重定向模式2
      # [IP][0x02][國(guó)家信息的絕對(duì)偏移][地區(qū)信息字符串]
      # 使用國(guó)家信息偏移量調(diào)用自己取得字符串信息
      cArea = self.getAreaAddr(self.getLong3(o + 1))
      o += 4
      # 跳過(guò)前4字節(jié)取字符串作為地區(qū)信息
      aArea = self.getAreaAddr(o)
      return (cArea, aArea)
      
    if byte != 1 and byte != 2:
      # 最簡(jiǎn)單的IP記錄形式,[IP][國(guó)家信息][地區(qū)信息]
      # 重定向模式1有種情況就是偏移量指向包含國(guó)家和地區(qū)信息兩個(gè)字符串
      # 即偏移量指向的第一個(gè)字節(jié)不是1或2,就使用這里的分支
      # 簡(jiǎn)單地說(shuō):取連續(xù)取兩個(gè)字符串!

      cArea = self.getString(o)
      #o += len(cArea) + 1
      # 我們已經(jīng)修改cArea為utf-8字符編碼了,len取得的長(zhǎng)度會(huì)有變,
      # 用下面方法得到offset
      o = self.img.find('\0',o) + 1
      aArea = self.getString(o)
      return (cArea, aArea)

  def find(self, ip, l, r):
    ''' 使用二分法查找網(wǎng)絡(luò)字節(jié)編碼的IP地址的索引記錄'''
    if r - l <= 1:
      return l

    m = (l + r) / 2
    o = self.firstIndex + m * 7
    #new_ip = unpack('I', self.img[o: o+4])[0]

    # Demon注:和上面一樣,強(qiáng)制使用little-endian
    new_ip = unpack('<I', self.img[o: o+4])[0]

    if ip <= new_ip:
      return self.find(ip, l, m)
    else:
      return self.find(ip, m, r)
    
  def getIPAddr(self, ip):
    ''' 調(diào)用其他函數(shù),取得信息!'''
    # 使用網(wǎng)絡(luò)字節(jié)編碼IP地址
    ip = unpack('!I', socket.inet_aton(ip))[0]
    # 使用 self.find 函數(shù)查找ip的索引偏移
    i = self.find(ip, 0, self.indexCount - 1)
    # 得到索引記錄
    o = self.firstIndex + i * 7
    # 索引記錄格式是: 前4字節(jié)IP信息+3字節(jié)指向IP記錄信息的偏移量
    # 這里就是使用后3字節(jié)作為偏移量得到其常規(guī)表示(QQWry.Dat用字符串表示值)
    o2 = self.getLong3(o + 4)
    # IP記錄偏移值+4可以丟棄前4字節(jié)的IP地址信息。
    (c, a) = self.getAddr(o2 + 4)
    return (c, a)
    
  def output(self, first, last):
    for i in range(first, last):
      o = self.firstIndex + i * 7
      ip = socket.inet_ntoa(pack('!I', unpack('I', self.img[o:o+4])[0]))
      offset = self.getLong3(o + 4)
      (c, a) = self.getAddr(offset + 4)
      print "%s %d %s/%s" % (ip, offset, c, a)


def main():
  i = IPInfo('QQWry.Dat')
  (c, a) = i.getIPAddr(sys.argv[1])

  # Demon注:如果是在Windows命令行中運(yùn)行把編碼轉(zhuǎn)回gb2312以避免亂碼
  if sys.platform == 'win32':
    c = unicode(c, 'utf-8').encode('gb2312')
    a = unicode(a, 'utf-8').encode('gb2312')
  print '%s %s/%s' % (sys.argv[1], c, a)

if __name__ == '__main__':
  main()

# changelog
# 時(shí)間:2009年5月29日
# 1. 工具下面網(wǎng)友的建議,修改"o += len(cArea) + 1"
#  http://linuxtoy.org/archives/python-ip.html#comment-113960
#  因?yàn)檫@個(gè)時(shí)候我已經(jīng)把得到的字符串變成utf-8編碼了,長(zhǎng)度會(huì)有變化!

相關(guān)文章

  • 分享10提高?Python?代碼的可讀性的技巧

    分享10提高?Python?代碼的可讀性的技巧

    這篇文章主要介紹了分享10提高?Python?代碼的可讀性的技巧,本文介紹20個(gè)常用的Python技巧來(lái)提高代碼的可讀性,并能幫助你節(jié)省大量時(shí)間,下面的技巧將在你的日常編碼練習(xí)中非常實(shí)用,需要的朋友可以參考一下
    2022-03-03
  • Python?os和os.path模塊詳情

    Python?os和os.path模塊詳情

    這篇文章主要介紹了Python?os和os.path模塊詳情,文章圍繞主題展開(kāi)詳細(xì)的相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-04-04
  • 使用__init__.py將文件夾設(shè)置成Python模塊示例詳解

    使用__init__.py將文件夾設(shè)置成Python模塊示例詳解

    這篇文章主要為大家介紹了使用__init__.py將文件夾設(shè)置成Python模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • kafka-python批量發(fā)送數(shù)據(jù)的實(shí)例

    kafka-python批量發(fā)送數(shù)據(jù)的實(shí)例

    今天小編就為大家分享一篇kafka-python批量發(fā)送數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 利用Python實(shí)現(xiàn)個(gè)性化日歷

    利用Python實(shí)現(xiàn)個(gè)性化日歷

    雖然市面上已經(jīng)存在現(xiàn)成的日歷功能,并且有第三方庫(kù)可以直接調(diào)用實(shí)現(xiàn),但我們?nèi)匀幌Mㄟ^(guò)自己編寫(xiě)日歷程序來(lái)引出我認(rèn)為好用的日歷實(shí)現(xiàn),所以下面就跟隨小編一起學(xué)習(xí)一下如何使用Python編寫(xiě)一個(gè)簡(jiǎn)單的日歷程序吧
    2024-02-02
  • 使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法

    使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法

    這篇文章主要介紹了使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Pytho常見(jiàn)的數(shù)據(jù)可視化庫(kù),小白必備

    Pytho常見(jiàn)的數(shù)據(jù)可視化庫(kù),小白必備

    Python作為數(shù)據(jù)分析的重要語(yǔ)言為數(shù)據(jù)分析的每個(gè)環(huán)節(jié)都提供了很多庫(kù).常見(jiàn)的數(shù)據(jù)可視化庫(kù)包括matplotib,seaborm,ggplot,bokeh,pygal,pyecharts等,下面小編一一介紹下,需要的朋友可以參考下
    2021-05-05
  • python清華pip鏡像源報(bào)HTTP error 403錯(cuò)誤解決辦法

    python清華pip鏡像源報(bào)HTTP error 403錯(cuò)誤解決辦法

    這篇文章主要介紹了如何解決在使用pip安裝Python包時(shí)遇到的403錯(cuò)誤,提供了三種解決方法,并強(qiáng)調(diào)了清除緩存以使更改生效的重要性,需要的朋友可以參考下
    2024-12-12
  • 使用pytorch和torchtext進(jìn)行文本分類(lèi)的實(shí)例

    使用pytorch和torchtext進(jìn)行文本分類(lèi)的實(shí)例

    今天小編就為大家分享一篇使用pytorch和torchtext進(jìn)行文本分類(lèi)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python通過(guò)cookie模擬已登錄狀態(tài)的初步研究

    python通過(guò)cookie模擬已登錄狀態(tài)的初步研究

    對(duì)于那些需要在登錄環(huán)境下進(jìn)行的爬蟲(chóng)操作,模擬登陸或偽裝已登錄狀態(tài)是一個(gè)剛性需求。這篇文章主要介紹了python通過(guò)cookie模擬已登錄狀態(tài)的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評(píng)論

孟村| 东至县| 海伦市| 陇川县| 邢台市| 临武县| 泰兴市| 子长县| 绥化市| 郁南县| 马关县| 什邡市| 南投市| 旬阳县| 姚安县| 柳江县| 德惠市| 正定县| 民乐县| 宣化县| 乾安县| 喀什市| 东城区| 嘉定区| 靖州| 壶关县| 呼和浩特市| 徐汇区| 商南县| 镶黄旗| 大埔县| 儋州市| 建平县| 通州区| 房产| 睢宁县| 右玉县| 庆元县| 耒阳市| 湄潭县| 西华县|