python16

构建高效IP代理池

#ip代理池构建的第一种方式
import random
import urllib.request
import re

#用户代理池用列表存储,这里构建3个用户代理(自己随便构建个数)
ippools = [
“”, #这里输入不同的 User-Agent 的值
“”, #这里输入不同的 User-Agent 的值
“”, #这里输入不同的 User-Agent 的值
]
#接下来构建一个函数,来实现用户代理池的功能
def ip(ippools): # uapools 形参
thisip = random.choice(ippools) #choice 从列表中 随机 选一个参数
print(thisip) #thisip
proxy = urllib.request.ProxyHandler({“http”:thisip}) #thisip
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) # 将opener安装为全局

#ip(ippools) #如果报错,这里运行一下,意思是从外边调用一下,看能不能运行

#url = “” # 要爬的网站地址 # 这里是查看异常语句能否运行

data1 = urllib.request.urlopen(url)

data = data1.read().decode(“utf-8”, “ignore”)

print(len(data)) #打印出来看看

for i in range(0,3): #加入爬3次
try:
ip(ippools) #这里 --每爬一下,它都切换一下 代理 ip
url = “” # 要爬的网站地址
data1 = urllib.request.urlopen(url)
data = data1.read().decode(“utf-8”, “ignore”)
# print(len(data)) #打印出来看看
# 将爬取的内容写进本地文件中 expected string or bytes-like oject 无法写进文件或者无法爬取
fh = open(“D:/xxxxx” + str(i) + “.htm”, “wb”)
fh.write(data1)
fh.close()
except Exception as err:
print(err)

#ip代理池构建的第二种方式,接口方式,对不稳定的ip好很多
import random
import urllib.request
import re

#接下来构建一个函数,来实现用户代理池的功能,接口方式
def ip(): # uapools 形参
thisip = urllib.request.urlopen(“大象那个外国网址(注意构建一下)”).read().decode(“utf-8”,“ignore”)
print(thisip) #thisip
proxy = urllib.request.ProxyHandler({“http”:thisip}) #thisip
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) # 将opener安装为全局
for i in range(0,5):
try:
ip() #这里 --每爬一下,它都切换一下 代理 ip
url = “” # 要爬的网站地址
data1 = urllib.request.urlopen(url)
data = data1.read().decode(“utf-8”, “ignore”)
# print(len(data)) #打印出来看看
# 将爬取的内容写进本地文件中 expected string or bytes-like oject 无法写进文件或者无法爬取
fh = open(“D:/xxxxx” + str(i) + “.htm”, “wb”)
fh.write(data1)
fh.close()
except Exception as err:
print(err)

#上面的thisip改进,一下提取10个,用正则提取
‘’’
for item in thisall:
print(item)
#读取这个数据,一行一行读取 这个for循环专门复制到python idea里运行一下,看一下提取的ip的格式,
先用解码代码,如果ip格式还是不正规
import re
item.decode(“utf-8”,“ignore”)

然后用正则提取正规样式的ip格式
‘’’
#第一个函数是添加ip的
def ip(time,isurllib): # time 调用几次 isurllib 是否调用

print("这一次调用了接口")
thisall = urllib.request.urlopen("大象那个外国网址(注意构建一下)").read().decode("utf-8","ignore")   #这里构建的网址,一下提取10个,num=10

#用一个空列表存储这些ip
ippools = []
for item in thisall:
    ippools.append(item.decode("utf-8","ignore"))

print(item.decode(“utf-8”,“ignore”)) #读取这个数据,一行一行读取 这个for循环专门复制到python idea里运行一下,看一下提取的ip的格式,先用解码,然后用正则提取正规样式的ip格式

else:
    print("这一次没有调用接口")

print("当前的所有ip列表是:")
print(ippools)

thisip = ippools[time]   # 如果isurllib != 1,那么此时直接执行这句,就是直接从接口中调用
print("当前用的ip是:" + ippools[time])                                             #thisip
proxy = urllib.request.ProxyHandler({"http":thisip})      #thisip
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)   #在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener)  # 将opener安装为全局

#第二个函数是添加代理ip的
def proxy_ip(ippools,time): #ippools 第一个参数是传过来的所有ip列表ippools
thisip = ippools[time]
print(“当前用的ip是:” + ippools[time]) # thisip
proxy = urllib.request.ProxyHandler({“http”: thisip}) # thisip
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler) # 在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) # 将opener安装为全局

#这里是调用10次ip的案例
x=0
for i in range(0,45):
try:
if(x % 10 == 0):
time = x % 10
ip(time,1) #调用一下ip
else:
ip(time, 0)
ip() #这里 --每爬一下,它都切换一下 代理 ip
url = “” # 要爬的网站地址
data1 = urllib.request.urlopen(url)
data = data1.read().decode(“utf-8”, “ignore”)
# print(len(data)) #打印出来看看
# 将爬取的内容写进本地文件中 expected string or bytes-like oject 无法写进文件或者无法爬取
fh = open(“D:/xxxxx” + str(i) + “.htm”, “wb”)
fh.write(data1)
fh.close()
x += 1
except Exception as err:
print(err)
x += 1

<think>根据用户的查询需求,用户希望了解在Python中实现16进制打印的方法。结合提供的引用内容,虽然引用[1]和引用[2]包含部分相关信息,但用户明确表示这些引用仅供参考,不是真正的需求。因此,我将重点整理Python中常用的16进制打印方法。 常见的16进制打印方法包括: 1. 使用内置函数`hex()`:将整数转换为16进制字符串,但无法直接处理字节数组。 2. 使用`binascii.hexlify()`:专门用于将字节数据转换为16进制表示。 3. 使用格式化字符串(如`format()`或`%`操作符):灵活控制输出格式。 4. 使用字节数组的`.hex()`方法(Python 3.5+):最简洁的字节转16进制字符串方法。 我将分步骤详细说明每种方法,并提供代码示例。同时注意用户要求所有行内数学表达式使用`$...$`格式,独立公式使用`$$...$$`格式。由于本问题不涉及数学公式,主要关注代码实现。 最后,按照指令生成相关问题。 </think>### Python实现16进制打印的方法详解 在Python中实现16进制打印主要有以下方法,适用于不同数据类型和场景: #### 1. **整数转16进制字符串** ```python num = 255 # 方法1: hex()函数 print(hex(num)) # 输出: 0xff # 方法2: 格式化字符串 print(f"{num:#x}") # 带前缀: 0xff print(f"{num:x}") # 无前缀: ff ``` #### 2. **字节数组转16进制** ```python data = b'\x12\x34\xAB\xCD' # 方法1: binascii.hexlify() import binascii print(binascii.hexlify(data)) # 输出: b'1234abcd' # 方法2: bytes.hex() (Python 3.5+) print(data.hex()) # 输出: 1234abcd print(data.hex(' ')) # 输出: 12 34 ab cd (带分隔符) # 方法3: 字节遍历格式化 print(' '.join(f"{b:02x}" for b in data)) # 输出: 12 34 ab cd ``` #### 3. **列表元素转16进制打印** ```python arr = [0x12, 0x34, 0xAB, 0xCD] # 方法1: 直接解包 print(*[f"{x:02x}" for x in arr]) # 输出: 12 34 ab cd # 方法2: 循环打印 for x in arr: print(f"{x:02x}", end=' ') # 输出: 12 34 ab cd ``` #### 4. **带格式的高级打印** ```python data = b'Python' # 十六进制转储(类似hexdump) for i in range(0, len(data), 16): chunk = data[i:i+16] hex_str = ' '.join(f"{b:02x}" for b in chunk) print(f"{i:08x}: {hex_str}") ``` #### 5. **网络数据包处理(参考引用[1])** ```python # TCP发送十六进制数据 import socket payload = b"\x12\x34\xAB\xCD" # 直接拼接字节 socket.send(payload) print(f"发送数据: {payload.hex(' ')}") # 输出: 12 34 ab cd ``` > **关键技巧**: > - 使用 `:x` 格式说明符控制输出格式 > - `zfill(2)` 可补零对齐(如 `f"{10:x}".zfill(2)` → `'0a'`) > - 字节处理优先使用内置 `bytes.hex()` 方法 > - `binascii` 模块提供更多进制转换功能[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值