boss要求写一个爬虫程序,实现域名抢注功能。
开始爬坑。。。。
需要注意的点:
1、这个网站比较简单,所以只需要分析form表单提交的信息。
2、登陆此网站需要post一个标识(需要提前获得)
3、requests包提供的session()函数可以直接向目标链接发送post请求
4、BeautifulSoup可以格式化代码,方便读取标签的值。
5、https会拒绝post请求,所以要加verify=false
6、 requests.packages.urllib3.disable_warnings()#不提示错误信息
7、发送post请求时,要发送headers,让服务器认为该请求是通过浏览器发送的
# -*- coding: utf-8 -*-
import ssl
import requests
import urllib.request
import time
import datetime
from bs4 import BeautifulSoup
session = requests.session()#session 全局变量
agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT) Chrome/51.0.2704.103 Safari/537.36"#模拟浏览器
headers = {
'User-Agent': agent
}
def getHtml(url):#获得网页源代码
ssl._create_default_https_context = ssl._create_unverified_context
page = urllib.request.urlopen(url)
html = page.read().decode('utf-8')
return html
def pay(h,t):#支付函数
check_data = {
'pay_balance': 'register/renew',
'domains': [t]
}
r1 = session.post('https://whois.ai/cgi-bin/batch.py', data=check_data, headers=h, verify=False)
print(r1.text)
def login(s,h):#登录函数
login_data = {
'time': s,
'login': '账号',
'password': '密码'
}
requests.packages.urllib3.disable_warnings()#不提示错误信息
r=session.post('https://whois.ai/cgi-bin/main.py', data=login_data,headers=h,verify=False)#登录(https会拒绝post请求,所以要加verify)
print('登陆成功')
def register(h,t):#注册函数
register_data = {
'domain': t,
'key1a' : 'not_paid',
'key2' : t,
'key4j' : '手机号',
'key4l' : '邮箱',
'key7a' : 'baidu.com',
'key8a' : '163.com'
}
check_data = {
'pay_balance': 'register/renew',
'domains': [t]
}
r2 = session.post('https://whois.ai/cgi-bin/form.py', data=register_data, headers=h, verify=False)#注册
html2 = BeautifulSoup(r2.text, 'html.parser')
txt = html2.findAll('font', {'color': 'green'})
if txt:
return 1
else:
return 0
html = getHtml("https://whois.ai/cgi-bin/main.py")
html=BeautifulSoup(html,'html.parser')
str = html.input['value']#获得登录标示
login(str,headers)#登录
list = ['','']#需要操作的域名列表
for link in list:#循环注册
value = 0
value = register(headers,link)
if value == 1:
print('注册成功')
pay(headers,link)#注册成功 进行付款
else:
print('注册失败')