没有写不出的代码,只有不努力的程序员

python爬取免费代理服务器

HI,大家好,我更文章了

今天文章主题是爬取代理服务器

我在网上找了一下有免费代理服务器的网址,因为懒得采集那么多,于是我就决定拿https://www.kuaidaili.com/free/来开刀

语言:python

用到的库:bs4,requests,time(bs4和requests需要用pip或easy_install安装)

1,爬取代理

先上到快代理免费IP,看下源代码,可以看到代理IP和端口等信息都被储存在了很多个td标签下,我们可以这样爬取:

import requests, bs4, time

IPlist=[]
PORTlist=[]
proxylist=[]

response =requests.get(“https://www.kuaidaili.com/free/inha/{}/”.format(x))

soup = bs4.BeautifulSoup(response.text,”html.parser”)
data1 = soup.find_all(name=”table”, class_=”table table-bordered table-striped”)
for n in data1:
    text=n.find_all(name=”td”,attrs={“data-title”: “IP”})
    for i in text:
        IPlist.append(i.text)
    text=n.find_all(name=’td’,attrs={“data-title”:”PORT”})
    for i in text:
        PORTlist.append(i.text)
    for x in range(len(IPlist)):
        a = IPlist[x]
        b = PORTlist[x]
        proxylist.append(a+”:”+b)

这样,就可以得出proxylist了,也就是爬取到的代理,格式是[“代理IP:代理端口”]

2,代理可用测试

我们可以使用requests向http://httpbin.org/get发送一个get请求,没有报错就通过(报错是因为连接代理超时,python会报错)

可以得出以下代码

def test_baidu(proxyip):
    proxy = {‘http’:proxyip}
    try:
        testconnect = requests.get(“http://httpbin.org/get”,proxies=proxy,timeout=2)
    except:
        return False
    else:
        return True

3,整合代码

整合后的代码是:

import requests, bs4, time

def test_baidu(proxyip):
    proxy = {‘http’:proxyip}
    try:
        testconnect = requests.get(“http://httpbin.org/get”,proxies=proxy,timeout=2)
    except:
        return False
    else:
        return True
    

IPlist=[]
PORTlist=[]
proxylist=[]
success=[]
for x in range(1,10):
    response =requests.get(“https://www.kuaidaili.com/free/inha/{}/”.format(x))
    soup = bs4.BeautifulSoup(response.text,”html.parser”)
    data1 = soup.find_all(name=”table”, class_=”table table-bordered table-striped”)
    for n in data1:
        text=n.find_all(name=”td”,attrs={“data-title”: “IP”})
        for i in text:
            IPlist.append(i.text)
        text=n.find_all(name=’td’,attrs={“data-title”:”PORT”})
        for i in text:
            PORTlist.append(i.text)
        for x in range(len(IPlist)):
            a = IPlist[x]
            b = PORTlist[x]
            proxylist.append(a+”:”+b)

t1 = time.time()
for f in proxylist:
        if test_baidu(f)==True:
            success.append(f)
            print(f+”连接成功”)
        if test_baidu(f)==False:
            print(f+”代理超时”)
import os
os.system(“cls”)
print(“扫描完成”)
print(success)
t2 = time.time()
print(“\n”)
print(“\n”)
print(“用时”+str(int(t2-t1))+”秒”)
time.sleep(20)

总结:从https://www.kuaidaili.com/free爬取IP和端口,存入proxylist列表,再通过访问httpbin.org/get,没报错就是成功,成功的存入success列表,优化后代码可以实现多页爬取,最后还要补一句,这里测试的标准是http,不排除代理是sock的,所以建议两个都测试一下,但是时间会翻一番,还有就是如果连接代理不行的话建议多换几个浏览器

制作不易,转载请注明出处:https://www.jimmyblog.com.cn/2020/09/21/get_proxy/

赞(1)
欢迎转载,转载请在文章末尾加上原地址,违者必究Jimmy的博客 » python爬取免费代理服务器
分享到: 更多 (0)

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    还要补一句,代理可能不支持https,建议加上区分代码

    jimmy2个月前 (09-23)回复
  2. #2

    果然很懒

    Bob2个月前 (09-29)回复