#!/usr/bin/env python
-- coding: utf-8 --
""" 利用代理IP刷点赞票(jiangxianli-多线程) author: gxcuizy date: 2021-03-25 """
import requests import time from bs4 import BeautifulSoup from multiprocessing import Process
class JiangXianLiProcess(Process): def init(self): # 继承Process类 super(JiangXianLiProcess, self).init() # 点赞接口地址 self.api_url = 'www.xxxxxx.com/topfirst.ph…' # 点赞请求参数 self.post_param = {'zid': '111', 'vid': '111', 'token': '111'} # 接口请求头信息 self.header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1320.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63010200)', 'Content-Type': 'application/x-www-form-urlencoded' } # 代理IP地址 self.proxies = {} # 超时时间 self.time_out = 20
def get_proxies_ip(self, ip_url):
"""获取代理IP"""
ip_request = requests.get(url=ip_url)
html_content = ip_request.content
soup = BeautifulSoup(html_content, 'html.parser')
# IP列表
link_list = soup.select('link')
is_start = False
ip_list = []
for link in link_list:
url_info = link.get('href')
if url_info == '//github.com':
is_start = True
if url_info == '//www.baidu.com':
break
if is_start and url_info != '//github.com':
ip_list.append(url_info)
return ip_list
def print_msg(self, msg=''):
"""打印信息"""
now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print('[' + now_time + '] ' + msg)
def run(self):
"""执行程序"""
while True:
# 获取前11页
page_list = range(1, 11)
for page in page_list:
request_url = 'https://ip.jiangxianli.com/?page=' + str(page)
# 获取IP地址
ip_list = self.get_proxies_ip(request_url)
for ip_info in ip_list:
self.proxies = {
'http': 'http:' + ip_info,
'https': 'https:' + ip_info
}
try:
# 发送post请求
request = requests.post(url=self.api_url, data=self.post_param, headers=self.header,
proxies=self.proxies, timeout=self.time_out)
response_text = request.text
self.print_msg(response_text)
except Exception as err_info:
# 异常信息
self.print_msg(str(err_info))
程序主入口
if name == 'main': # 获取运行的进程数 process_num = input('请输入运行进程数:') process_list = [] for i in range(int(process_num)): p = JiangXianLiProcess() # star默认执行run()方法 p.start() process_list.append(p) # 循环执行多进程 for process in process_list: process.join() # 每个进程间隔10秒执行 time.sleep(10)