github上的python爬虫_python爬虫入门(2):让你的github项目火起来

最近闲的比较无聊,于是想做一个自动star你的项目的爬虫玩玩。不然star数太低了,也比较难看。思路是准备注册成批的github帐号,然后挨个给你点star。

STEP.1 工具准备

我用的是python 2.7.10,本次实验不需要下载依赖库,用自带的就行了。

import urllib2,urllib,re,time

STEP.2 如何准备github帐号

显然,我们要star的话, 帐号少说也得有个1000个吧。1000个帐号手动注册明显是不可能的,所以我们得写个小程序来注册帐号。

我们首先来调研一下github注册的过程。打开github-join

我们填入如下信息

用chrome开发者工具我们可以看到,数据以post的形式发给了这个链接'https://github.com/join'。

唯一还不明白的数据就是这个'authenticity_token'。但如果我们打开网页的源码,会发现每一页都会有'authenticity_token',有时还有好几个,而且还都不一样。那我们该发的是哪一个'authenticity_token'呢。

事实上,github每一个可供post的按钮都有token,你在post的时候,将离这个按钮最近的token发过去就行了。

知道了这一点后,我们就能开始写小程序了。

STEP.3 github_join的编写

class gitjoin:

def __init__(self):

cookies = urllib2.HTTPCookieProcessor() #构造cookies

self.opener = urllib2.build_opener(cookies)

self.opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'),('Origin','https://github.com'

),('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'),('Accept-Language','zh-CN,zh;q=0.8'),

('Connection','keep-alive')] #请求头

self.re_auth = re.compile('authenticity_token[^>]+') #得到github token信息

我们用一个叫gitjoin的类来封装我们的注册机。这里我们的正则表达式只用了一次,只要匹配那个'token'就行了。

然后我们需要获得token。这个token就是用来注册的。代码如下。

def view(self):

response = self.opener.open('https://github.com/join')

html = response.read()

print u'正在登录join'

print u'状态码为',response.getcode()

token = self.re_auth.findall(html)[0][41:-3]

return token

获得了token之后,我们就可以开始注册了。

def zhuce(self,token,login,email,password):

self.formdata = {'utf-8':'✓','authenticity_token':token,'user[login]':login,'user[email]':email,'user[password]':password,'source':'form-home'}

data_encoded = urllib.urlencode(self.formdata)

print data_encoded

response = self.opener.open('https://github.com/join',data_encoded)

print u'正在注册'

print u'状态码为',response.getcode(),u'转到',response.geturl()

注册完了,就结束了吗?

很明显没这么简单,你注册完之后,你的cookies保存了你的用户信息,你这时是不能够继续注册的。你需要logout之后,才能注册。

这里logout我就不用chrome分析了。反正就是post一个数据给https://github.com/logout,不过要记得加token(注意这里的token不是刚刚的注册token,我们需要重新获取它的logout token)。我直接上代码吧。

这是获取logout token

def view_index(self):

response = self.opener.open('https://github.com/')

html = response.read()

token = self.re_auth.findall(html)[0][41:-3]

return token

这是logout

def logout(self,token):

self.formdata = {'utf-8':'✓','authenticity_token':token}

data_encoded = urllib.urlencode(self.formdata)

response = self.opener.open('https://github.com/logout',data_encoded)

print u'正在登出'

print u'状态码为',response.getcode(),u'转到',response.geturl()

现在gitjoin类就已经写好了,我们可以尝试注册一个账号了。

signin = gitjoin()

token = signin.view()

signin.zhuce(token,"pighasa100","pighasa100@qq.com","pighasa1")

执行代码后,发现在github上也是能登录这个帐号的。说明我们成功了。下一步只需要批量生成帐号就行了。

STEP.4 登录和点star

然后关于登录和点star的问题。之前我在叙述如何注册的时候就说过了,这里我就简要概括了。你们可以自己用chrome或者火狐或者wireshark去分析,我这里就直接上代码了。

这里是login

def login(self,token,usr,password):

self.formdata = {'commit':'Sign in','utf-8':'✓','authenticity_token':token,'login':usr,'password':password}

data_encoded = urllib.urlencode(self.formdata)

response = self.opener.open('https://github.com/session',data_encoded)

print u'现在正在登陆',usr

这里是star

def star(self,usrName,repoName):

url = ''.join(['https://github.com/',usrName,'/',repoName,'/'])

response = self.opener.open(url)

html = response.read()

token = self.re_auth.findall(html)[3][41:-3]

formdata = {'utf-8':'✓','authenticity_token':token}

data_encoded = urllib.urlencode(formdata)

response = self.opener.open(url+'star',data_encoded)

STEP.5 疯狂star

这一步还能干啥呢,该干的都干了,现在当然是疯狂的用刚刚注册好的帐号来点star。我们来看看效果。

这是我的github页面,很明显能看到一堆机器在点赞。

不过我也是很怕被注意到然后被封掉的,所以我设置的延时比较长,点了一次赞之后,要过6秒才能点下一次。

这个项目po在这里githack。

我在** github.py 这个文件里写了一个run函数,你只需要调用

run('你的id','你的仓库名',需要点赞的次数)

就可以自动帮你点star了。

喜欢的点一波喜欢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Codevs] 1082 线段树练习3

1082 线段树练习 3 时间限制: 3 s空间限制: 128000 KB题目等级 : 大师 Master题目描述 Description给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和。 输入描述 Input Description第一行一个正整数n&a…

linux环境下远程访问ftp

sftp ftpuser127.0.0.1使用sftp命令 ftpuser是用户名 127.0.0.1是目标ip 亲测好使。转载于:https://www.cnblogs.com/zjiacun/p/7513938.html

perfectmoney php接口_Perfect Money完美货币注册和用支付宝提现方法

一、PerfectMoney介绍:PerfectMoney(简称PM)是一个瑞士的电子支付系统,类似于PP/AP/LR,也是一种国际网银,可以用来交易美元(USD)/欧元(EURO)等国际货币。与其他网银不同的是,PM可以直接和国内的银行卡相连,…

双摄测距原理_双摄像头系列原理深度剖析

http://www.dzsc.com/data/2016-7-13/110171.html如之前文章介绍,双摄像头的应用主要分为:距离相关的应用,光学变焦,暗光补偿以及3D拍摄和建模。每种应用的原理都有些不同,我们就分别介绍一下相关的原理:从…

利用Maven快速创建一个简单的spring boot 实例

Spring Boot的好处&#xff1a;spring boot 大大减少了 使用spring的配置 和大量 xml 文件&#xff0c;并有效解决的项目之间的依赖问题&#xff0c;为想使用 spring项目 大大减轻的工作量 1.先创建一个Maven项目 2.配置pom.xml <project xmlns"http://maven.apache.or…

mysql主从同步原理_mysql主从同步以及原理

mysql主从复制介绍当前的生产工作中&#xff0c;大多数应用的mysql主从同步都是异步的复制方式&#xff0c;即不是严格实时的数据同步。实时和异步&#xff1a;同步复制: 指的是客户端连接到MySQL主服务器写入一段数据,MySQL主服务器同步给MySQL从服务器需要等待从服务器发出同…

mysql不兼容_mysql5.7 不兼容问题

通过navicat工具导入psc数据库备份文件&#xff0c;报错如下&#xff0c;mysql版本5.7执行如下语句不通过DROP TABLE IF EXISTS guard_user;CREATE TABLE guard_user (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 操作员编号,login_account varchar(16) NOT NULL …

MSSQL 如何采用sql语句 获取建表字段说明、字段备注、字段类型、字段长度

转自: http://www.maomao365.com/?p4983 <span style"color:red;font-weight:bold;">下文讲述-采用sql脚本获取指定表中所有列对应的说明信息,脚本如下所示:</span> SELECT (case when a.colorder1 then d.name else end) [数据表名称], a.colorder […

oracle 时间加减

sysdate1 加一天sysdate1/24 加1小时sysdate1/(24*60) 加1分钟sysdate1/(24*60*60) 加1秒钟类推至毫秒0.001秒加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1) from dual; --加1月 select sysdate,to_char…

mysql数据库层次结构_MySQL逻辑分层介绍

上一篇文章主要介绍了MySQL在Ubuntu18.04系统上的安装&#xff0c;以及安装过程中可能会遇到的一些问题的解决方案。在这篇文章里&#xff0c;开始介绍MySQL数据库的逻辑分层。通过本文的介绍&#xff0c;可以大致了解到MySQL的语句从客户端发出请求后&#xff0c;在服务器经历…

嵌入式 Linux 的分类

http://blog.csdn.net/lu_embedded/article/details/60469851 由于 Linux 所具备的开源、稳定、高效、易裁剪、硬件支持广泛等优点&#xff0c;使得它在嵌入式系统领域最近十几年内迅速崛起。目前嵌入式 Linux 系统开发已经开辟了很大的市场&#xff0c;同时也开发出很多成型的…

dnf台服升级mysql_MySQL Yum存储库 安装、升级、集群

添加MySQL Yum存储库首先&#xff0c;将MySQL Yum存储库添加到系统的存储库列表中。按着这些次序&#xff1a;选择并下载适用于您的平台的发行包。使用以下命令安装下载的发行包&#xff0c;替换platform-and-version-specific-package-name为下载的包的名称&#xff1a;例如&a…

MyIfmHttpClient

package com.yd.ifm.client.caller.util.http;import java.util.Map;import com.yd.ifm.client.caller.model.ResponseData; import com.yd.ifm.client.caller.util.http.HttpEnum.ContentTypeEnum;public interface IfmHttpClient {/*** 发送post数据* 200为正常的业务数据&am…

python 只去除英文_如何使用 Python 制作词云(Word Cloud)-英文词云篇

wordcloud 安装报错与解决虽然网络上也有各种工具可以一键生成词云&#xff0c;但是使用Python制作词云感觉是一件很酷的事情。作为一个 Python 小白&#xff0c;使用 Python 的过程并不那么轻松。比如最最基础的&#xff0c;用Python 制作词云需要安装第三方库 wordcloud&…

坑爹的水题之“元芳你怎么看”

题目大意&#xff1a; 一些人分银子&#xff0c;如果每个人分x两&#xff0c;那么还有y两分不出去&#xff1b;如果每个人分i 两的话那么还差 j 两银子。问你输入x&#xff0c;y&#xff0c;i&#xff0c;j 四个整数&#xff0c;能否成立。 解题思路&#xff1a; 啥叫思路&…

mysql 查看trige_mysql查看所有存储过程,函数,视图,触发器,表

查询数据库中的存储过程和函数方法一&#xff1a;select name from mysql.proc where db your_db_name and type PROCEDURE //存储过程select name from mysql.proc where db your_db_name and type FUNCTION //函数方法二&#xff1a;show procedure status; //存储过…

centos7 卸载 gitlab

标黑的就是关键命令&#xff0c;先停止gitlab服务&#xff0c;然后rpm -e卸载&#xff0c;然后查看剩余gitlab进程&#xff0c;然后杀死主进程&#xff0c;然后删除所有相关目录 1 [liuyxMiWiFi-R3L-srv ~]$ sudo gitlab-ctl stop2 [sudo] password for liuyx: 3 liuyx 不在 su…

webstrom中打包的详细_webpack打包体积优化

webpackwebpack打包体积优化webpack官方定义webpack 是一个模块打包器。webpack 的主要目标是将 JavaScript 文件打包在一起&#xff0c;打包后的文件用于在浏览器中使用&#xff0c;但它也能够胜任转换(transform)、打包(bundle)或包裹(package)任何资源(resource or asset)。…

201621123003《Java程序设计》第一周学习总结

#1. 本周学习总结 本周主要学习了Java的jdk、jvm、jre等基本概念&#xff0c;Java的发展史&#xff0c;知道Java语言的跨平台、面向对象等主要特点&#xff0c;简单了解了Java程序的编译和运行过程。对于学习Java&#xff0c;我的学习和编程能力还是很吃力的&#xff0c;但还是…

mysql jar jdk1.6_Windows下JDK1.6+MySQL+MyEclipse开发环境的配置

1. 安装JDK&#xff0c;放在E盘 “E:\JDK6”,第二个JRE默认路径安装&#xff1b;2. 设置环境变量 (系统变量)&#xff1a;(1)创建JAVA_HOME E:\JDK6(2)Path ;%JAVA_HOME%\bin(3)新建CLASSES .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar3. 安装MyEclipse&#xff0c…