Python+mysql+php搭建另类免费代理池
文章目录
- 前言:
- 思路:
- 开干:
- php连接MySQL取ip和端口:
-
- 效果图:
- 最后调用代理池:
- 总结:
前言:
为什么说另类的,因为我完全是按照我自己的想法来的,比较鸡肋,但是能用;
思路:
找到免费代理网站—>爬下里面的代理—>存到数据库—>用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.textif 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服务器上的,就这样吧