文章目录
- 前言:
- 思路:
- 开干:
- 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.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服务器上的,就这样吧