运行前准备:
1. 创建一个mysql数据库,并且选utf8mb4编码,并修改pymysql.connect这一行的配置
2. 脚本最后面添加自己的用户名密码
- #-*- coding=utf-8 -*-
- import requests
- import re
- import pymysql
- import sys
- db=pymysql.connect('127.0.0.1','loc_reg','passwd','loc_reg',charset='utf8mb4')
- cur=db.cursor()
- db.ping()
- try:
- sql="""
- create table if not exists loc_reg_relation(
- uid bigint
- ,username varchar(64)
- ,regtime varchar(64)
- ,puid bigint
- ,pusername varchar(64)
- );
- """
- cur.execute(sql)
- db.commit()
- except Exception as e:
- print(e)
- sys.exit(0)
- home='https://www.hostloc.com'
- forum_home=home+'/forum.php?mod=forumdisplay&fid=45&orderby=dateline&filter=author&orderby=dateline&page={}'
- login_url=home+'/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1'
- login_data={
- 'fastloginfield':'username'
- ,'username':''
- ,'cookietime':'2592000'
- ,'password':''
- ,'quickforward':'yes'
- ,'handlekey':'ls'
- }
- headers={
- 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
- ,'Accept-Encoding':'gzip, deflate, sdch'
- ,'Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6'
- ,'Host':'www.hostloc.com'
- ,'Referer':'https://www.hostloc.com/forum.php'
- ,'Upgrade-Insecure-Requests':'1'
- ,'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
- }
- class HostLoc():
- def __init__(self,username,passwd):
- self.username=username
- self.passwd=passwd
- self.session=requests.Session()
- self.session.headers=headers
- login_data['username']=username
- login_data['password']=passwd
- login_data['formhash']=self.get_hidden_value(home,'formhash')
- self.login()
- def login(self):
- self.session.post(login_url,data=login_data,verify=False)
- def isLogin(self):
- url='https://www.hostloc.com/home.php?mod=spacecp'
- html=self.session.get(url).text
- UserName=re.findall(self.username,html)
- if len(UserName)==0:
- return False
- else:
- return True
- def get_hidden_value(self,url,keyname):
- r=self.session.get(url)
- cont=r.text
- value=re.findall('<input type="hidden" name="{}" value="(.*?)" />'.format(keyname),cont)[0]
- return value
- def GetNewUser(self):
- r=self.session.get(home)
- space,username=re.findall(u'</span>欢迎新会员: <em><a href="(space-username-.*?\.html)" target="_blank" class="xi2">(.*?)</a></em></p',r.text)[0]
- space_url=home+'/'+space
- if not self.exists(username):
- uid,puid,pusername,regtime=self.GetUserInfo(space_url)
- print('get new register user:{},register time:{};invited by {}'.format(uid,regtime,pusername))
- sql='insert into loc_reg_relation(`uid`,`username`,`regtime`,`puid`,`pusername`) values(%s,%s,%s,%s,%s)'
- cur.execute(sql,(uid,username,regtime,puid,pusername))
- db.commit()
- def exists(self,username):
- sql="select count(1) from loc_reg_relation where `username`=%s;"
- cur.execute(sql,(username,))
- num=int(cur.fetchone()[0])
- return num>0
- def GetUserInfo(self,space_url):
- r=self.session.get(space_url)
- uid=re.findall('<a id="domainurl" ',r.text)[0]
- friend_url='https://www.hostloc.com/home.php?mod=space&uid={}&do=friend&view=me&from=space'.format(uid)
- r2=self.session.get(friend_url)
- try:
- puid,pusername=re.findall('<a href="space-uid-(\d+)\.html">(.*?)</a><span id="friend_note_\d+" class="note xw0" title=""></span>',r2.text)[0]
- except:
- puid,pusername=0,'已删除好友'
- profile_url='https://www.hostloc.com/home.php?mod=space&uid={}&do=profile'.format(uid)
- r3=self.session.get(profile_url)
- regtime=re.findall(u'<em>注册时间</em>([\d\- :]*?)</li>',r3.text)[0]
- return uid,puid,pusername,regtime
- if __name__=="__main__":
- username=''
- password=''
- loc=HostLoc(username,password)
- loc.GetNewUser()
转自hostloc论坛