python爬取国内代理ip_【python】国内高匿代理爬取,并验证代理ip有效性

运行环境:python 3.7.3

所需库:

1. requests

2. lxml

3. time

4. multiprocessing

5. sys

目的:构建自己的代理ip池,针对封ip型反爬虫

说明:西刺代理对一天内爬取的次数有限制,超出后会被封ip

import requests

from lxml import etree

import time

from multiprocessing import Pool

import multiprocessing

import sys

def get_single(url):         #爬出单页上的所有代理ip

r=requests.get(url,headers=head)

if r.status_code==503:

print('由于爬取次数过多,你的Ip已经被封')

sys.exit(0)

content=etree.HTML(r.text)

ip=content.xpath('//table[@id="ip_list"]/tr/td[2]/text()')

duankou=content.xpath('//table[@id="ip_list"]/tr/td[3]/text()')

for i in range(0,len(ip)):

ip_list.append(ip[i]+":"+duankou[i])

def input_urls():     #防止ip被封每三秒访问一页

for i in range(1,21):

get_single(url+str(i))

print('爬取第'+str(i)+'页\r',end="")

time.sleep(3)

def verify_ips(ip,ip_valid_list):    #验证代理ip

poxie="http://"+ip

proxies={

'http':poxie,

'https':poxie

}

try:

requests.get('https://www.baidu.com',headers=head,proxies=proxies,timeout=3)

ip_valid_list.append(ip)

except Exception as e :

print(e)

ip_list=[]

url="https://www.xicidaili.com/nn/"

head={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}

if __name__ == "__main__":

print(

"""

程序结束后会在当前文件夹生成一个ip_proxies_valid.txt文件,

防止ip被封,控制爬取频率

"""

)

mlist=multiprocessing.Manager()

ip_valid_list=mlist.list()

input_urls()

print("总共爬取到"+str(len(ip_list))+"个ip,接下来准备验证ip有效性")

print("验证倒计时3s")

time.sleep(1)

print("验证倒计时2s")

time.sleep(1)

print("验证倒计时1s")

time.sleep(1)

print("开始验证!")

p=Pool(15)

for ip in ip_list:

p.apply_async(verify_ips,(ip,ip_valid_list)) #多进程验证

p.close()

p.join()

f=open('ip_proxies_valid.txt','a')

for ip in ip_valid_list:   #写入txt文件

f.write(ip)

if ip!=ip_valid_list[-1]:

f.write('\n')

f.close()

print("完成")

爬取到的有效代理ip如下图所示

有效高匿代理ip

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值