Python+mysql+php搭建另类免费代理池

该篇文章详细描述了一种利用Python爬虫抓取免费代理网站数据,存储到MySQL数据库中,然后用PHP从数据库中随机获取代理IP和端口的方法。通过selenium处理加密的代理信息,并展示了如何在Python中使用requests库通过获取的代理进行网络请求。尽管方法可能不高效,但展示了动手能力和技术整合的实践过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言:

为什么说另类的,因为我完全是按照我自己的想法来的,比较鸡肋,但是能用;

思路:

找到免费代理网站—>爬下里面的代理—>存到数据库—>用php写一个网页,随机从数据库里蹦出一个代理出来—>
python访问本地网站接收代理地址

开干:

找个免费代理地址,直接百度,有一大堆:
在这里插入图片描述
连接数据库,把爬到的地址存进去,这里我找的网站发现地址使用js加密了,我就直接上selenium拿数据了
参考代码:

import requests
import re
from selenium import webdriver
from selenium.webdriver import Chrome
from time import sleep
import pymysql
try:
    db = pymysql.connect(host='localhost',
                        user='root',
                        password='root',
                        database='spider')
    cursor = db.cursor()

    proxy = '127.0.0.1:1082'
    for i in range(1, 3):
        url = f'http://free-proxy.cz/zh/proxylist/country/all/http/ping/all/{i}'
        options = webdriver.ChromeOptions()
        options.add_argument('--start-maximized')
        options.add_argument('--proxy-server=http://' + proxy)
        browser = Chrome(options=options)
        browser.get(url=url)
        print(browser.title)
        trs = browser.find_elements(by='xpath', value='/html/body/div[2]/div[2]/table/tbody/tr')

        for tr in trs:
            a = tr.text
            if len(a) != 0:
                strs = a.split('H')[0]
                li = strs.split(' ')
                # ip = li[0]
                # port = li[1]
                # print(ip, port)
                SQL = "insert into free_pool(ip,port) values (%s, %s)"
                cursor.execute(SQL, (li[0], li[1],))
                print("成功")
except Exception as e:
    print("error:", e)
finally:
    db.close()


sleep(3)

效果图:我只拿下了里面的地址和端口
在这里插入图片描述

php连接MySQL取ip和端口:

<?php
	$db = mysql_connect("localhost","root","root");
	/*
	if($db){
		echo "sessful";
	}else{
		echo "no no no";
	}
	*/
	mysql_select_db("spider",$db);
	$result=mysql_query("SELECT * FROM free_pool",$db);
	$max_num=mysql_num_rows($result);//取得数据库的记录数

	srand((double)microtime()*10000000); //生成随机数种子。

	$se_pos=rand(0, $max_num-1); //从0到最大记录数取随机数
	$length=30; //设定共取多少条记录
	
	$result_lim=mysql_query("select * from free_pool limit $se_pos,$length",$db);

	$myrow_lim=mysql_fetch_array($result_lim);

	//printf("%sn", $se_pos);//显示随机得到的记录号

	printf($myrow_lim["ip"].':'.$myrow_lim["port"]);//显示随机得到的记录的name字段

	//select * from free_pool order by rand() limit 1;

?>

效果图:

每次访问这个地址,都会显示一个不同的地址加端口出来
在这里插入图片描述

最后调用代理池:

直接上代码:

import requests
resp = requests.get('http://192.168.1.106/proxy.php').text
print(resp)
print(type(resp))
url = 'http://httpbin.org/get'
proxy = resp
proies = {
    'http': 'http://' + proxy,
    'https': 'https://' + proxy
}

try:
    print("使用普通代理返回的数据:")
    response = requests.get(url, proxies=proies)
    print(response.json())
   
    print("不使用代理返回的数据:")
    resp = requests.get(url)
    print(resp.json())
except Exception as e:
    print("Error:",e)

代理使用成功,就是很慢,而且很多不能用
在这里插入图片描述

总结:

全是我想到什么就敲什么,就是想锻炼一下动手能力,中间的php代码是放在本地的phpstudy服务器上的,就这样吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青衫木马牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值