精华内容
下载资源
问答
  • 目标:模拟登录知乎 代码如下: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = 'ziv·chan' 4 5 6 import re 7 import time 8 import requests 9 from PIL import Image...

    目标:模拟登录知乎

    代码如下:

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 __author__ = 'ziv·chan'
     4 
     5 
     6 import re
     7 import time
     8 import requests
     9 from PIL import Image
    10 
    11 
    12 url_login = 'https://www.zhihu.com/login/phone_num'
    13 
    14 headers = {
    15         'Host' : 'www.zhihu.com',
    16         'Origin' : 'https://www.zhihu.com',
    17         'Referer' : 'https://www.zhihu.com/',
    18         'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'
    19 }
    20 
    21 session = requests.session()
    22 
    23 # 获取xsrf
    24 def get_xsrf():
    25     url = 'https://www.zhihu.com/#signin'
    26     html = session.get(url)
    27     pageCode = html.text
    28     pattern = re.compile('name="_xsrf" value="(.*?)"/>',re.S)
    29     xsrf = re.search(pattern,pageCode).group(1)
    30     return xsrf
    31 
    32 # 获取验证码
    33 def get_captcha():
    34     # 获取验证码url
    35     t = str(int(time.time() * 1000))
    36     url = 'http://www.zhihu.com/captcha.gif?r=%s&type=login' % t
    37     cha = session.get(url)
    38     with open('cha.jpg', 'wb') as f:
    39         f.write(cha.content)
    40         f.close()
    41         im = Image.open('cha.jpg')
    42         im.show()
    43         im.close()
    44     captcha = raw_input("请输入验证码")
    45     return captcha
    46 
    47 
    48 form_data = {
    49         '_xsrf' : get_xsrf(),
    50         'password' : 'ChelseaFC.1',
    51         'captcha' : get_captcha(),
    52         'remember_me' : 'true',
    53         'phone_num' : '18362972928'
    54 }
    55 print form_data
    56 # 注意用法
    57 res = session.post(url_login,data=form_data,headers=headers)
    58 print res.json()['msg']

    输出:

    请输入验证码edx5
    {'phone_num': '18362972928', '_xsrf': u'83488f00833e19acc086395dbce597c4', 'password': 'ChelseaFC.1', 'remember_me': 'true', 'captcha': 'edx5'}
    登陆成功

    难点:验证码的URL中的参数‘r’取自当前时间的时间戳(1970纪元后经过的浮点秒数)再处理

    以上。

    转载于:https://www.cnblogs.com/ziv-chan/p/5508283.html

    展开全文
  • 目标:1、模拟登录豆瓣,2、自动更改签名和发表说说。 代码如下: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = 'ziv·chan' 4 5 6 import re 7 import time 8 import ...

    目标:1、模拟登录豆瓣,2、自动更改签名和发表说说。

     

    代码如下:

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 __author__ = 'ziv·chan'
     4 
     5 
     6 import re
     7 import time
     8 import requests
     9 from PIL import Image
    10 
    11 url = 'https://www.douban.com/'
    12 
    13 headers = {
    14         'origin' : 'https://www.douban.com',
    15         'referer' : 'https://www.douban.com/',
    16         'user-agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'
    17 }
    18 
    19 session = requests.session()
    20 
    21 # 获取验证码Id
    22 def get_captchaId():
    23     html = session.get(url,headers=headers)
    24     html.encoding = 'utf-8'
    25     pageCode = html.text
    26     pattern = re.compile('captcha[?]id=(.*?)&',re.S)
    27     captchaId = re.findall(pattern,pageCode)[0]
    28     return captchaId
    29 
    30 # 获取验证码图片
    31 def get_captchaSolu(captchaId):
    32     url_plus = 'https://www.douban.com/misc/captcha?id=%s&size=s' % captchaId
    33     cha = session.get(url_plus,headers=headers)
    34     with open('cap_douban.png','wb') as f:
    35         f.write(cha.content)
    36         f.close()
    37         im = Image.open('cap_douban.png')
    38         im.show()
    39         im.close()
    40     captcha = raw_input('请输入验证码')
    41     return captcha
    42 
    43 # 编辑签名
    44 def edit_signature(ck):
    45     url = 'https://www.douban.com/j/people/143780683/edit_signature'
    46     data = {
    47         'ck' : ck,
    48         'signature' : '人间有味是清欢。'
    49     }
    50     headers = {
    51             'origin' : 'https://www.douban.com',
    52             'referer' : 'https://www.douban.com/people/143780683/',
    53             'user-agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36',
    54             'x-requested-with' : 'XMLHttpRequest'
    55     }
    56     session.post(url,data=data,headers=headers)
    57 
    58 # 编辑说说
    59 def edit_words(ck):
    60     url = 'https://www.douban.com/'
    61     data = {
    62         'ck' : ck,
    63         'comment' : '天之涯,地之角,知交半零落。一斛浊酒尽余欢,今宵别梦寒。'
    64     }
    65     headers = {
    66         'origin': 'https://www.douban.com',
    67         'referer': 'https://www.douban.com/',
    68         'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'
    69     }
    70     session.post(url,data=data,headers=headers)
    71 
    72 # 获取ck
    73 def get_ck():
    74     url = 'https://www.douban.com/people/143780683/'
    75     html = session.get(url,headers=headers)
    76     pageCode = html.text
    77     # print pageCode
    78     pattern = re.compile('ck=(.*?)[(">)]',re.S)
    79     ck = re.findall(pattern,pageCode)[0]
    80     return ck
    81 
    82 if __name__ == '__main__':
    83     captchaId = get_captchaId()
    84     captcha = get_captchaSolu(captchaId)
    85     form_data = {
    86             'source' : 'index_nav',
    87             'form_email' : '18362972928',
    88             'form_password' : 'ChelseaFC.2',
    89             'captcha-solution' : captcha,
    90             'captcha-id' : captchaId
    91     }
    92     session.post('https://www.douban.com/accounts/login',data=form_data,headers=headers)
    93 
    94     ck = get_ck()
    95     edit_signature(ck)
    96     # 避免冲突,设置延时
    97     time.sleep(5)
    98     edit_words(ck)

     

    转载于:https://www.cnblogs.com/ziv-chan/p/5507846.html

    展开全文
  • 我们先以一个最简单的实例来了解模拟登录后页面的抓取过程,其原理在于模拟登录后 Cookies 的维护。 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多...

    我们先以一个最简单的实例来了解模拟登录后页面的抓取过程,其原理在于模拟登录后 Cookies 的维护。

    很多人学习python,不知道从何学起。
    很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
    很多已经做案例的人,却不知道如何去学习更加高深的知识。
    那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
    QQ群:961562169

    1. 本节目标

    本节将讲解以 GitHub 为例来实现模拟登录的过程,同时爬取登录后才可以访问的页面信息,如好友动态、个人信息等内容。

    我们应该都听说过 GitHub,如果在我们在 Github 上关注了某些人,在登录之后就会看到他们最近的动态信息,比如他们最近收藏了哪个 Repository,创建了哪个组织,推送了哪些代码。但是退出登录之后,我们就无法再看到这些信息。

    如果希望爬取 GitHub 上所关注人的最近动态,我们就需要模拟登录 GitHub。

    2. 环境准备

    请确保已经安装好了 requests 和 lxml 库,如没有安装可以参考第 1 章的安装说明。

    3. 分析登录过程

    首先要分析登录的过程,需要探究后台的登录请求是怎样发送的,登录之后又有怎样的处理过程。

    如果已经登录 GitHub,先退出登录,同时清除 Cookies。

    打开 GitHub 的登录页面,链接为 https://github.com/login,输入 GitHub 的用户名和密码,打开开发者工具,将 Preserve Log 选项勾选上,这表示显示持续日志,如图 10-1 所示。

    图 10-1 开发者工具设置

    点击登录按钮,这时便会看到开发者工具下方显示了各个请求过程,如图 10-2 所示。

    图 10-2 请求过程

    点击第一个请求,进入其详情页面,如图 10-3 所示。

    图 10-3 详情页面

    可以看到请求的 URL 为 https://github.com/session,请求方式为 POST。再往下看,我们观察到它的 Form Data 和 Headers 这两部分内容,如图 10-4 所示。

    图 10-4 详情页面

    Headers 里面包含了 Cookies、Host、Origin、Referer、User-Agent 等信息。Form Data 包含了 5 个字段,commit 是固定的字符串 Sign in,utf8 是一个勾选字符,authenticity_token 较长,其初步判断是一个 Base64 加密的字符串,login 是登录的用户名,password 是登录的密码。

    综上所述,我们现在无法直接构造的内容有 Cookies 和 authenticity_token。下面我们再来探寻一下这两部分内容如何获取。

    在登录之前我们会访问到一个登录页面,此页面是通过 GET 形式访问的。输入用户名密码,点击登录按钮,浏览器发送这两部分信息,也就是说 Cookies 和 authenticity_token 一定是在访问登录页的时候设置的。

    这时再退出登录,回到登录页,同时清空 Cookies,重新访问登录页,截获发生的请求,如图 10-5 所示。

    图 10-5 截获请求

    访问登录页面的请求如图所示,Response Headers 有一个 Set-Cookie 字段。这就是设置 Cookies 的过程。

    另外,我们发现 Response Headers 没有和 authenticity_token 相关的信息,所以可能 authenticity_token 还隐藏在其他的地方或者是计算出来的。我们再从网页的源码探寻,搜索相关字段,发现源代码里面隐藏着此信息,它是一个隐藏式表单元素,如图 10-6 所示。

    图 10-6 表单元素

    现在我们已经获取到所有信息,接下来实现模拟登录。

    4. 代码实战

    首先我们定义一个 Login 类,初始化一些变量:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    class Login(object):

        def __init__(self):

            self.headers = {

                'Referer': 'https://github.com/',

                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',

                'Host': 'github.com'

            }

            self.login_url = 'https://github.com/login'

            self.post_url = 'https://github.com/session'

            self.logined_url = 'https://github.com/settings/profile'

            self.session = requests.Session()

    这里最重要的一个变量就是 requests 库的 Session,它可以帮助我们维持一个会话,而且可以自动处理 Cookies,我们不用再去担心 Cookies 的问题。

    接下来,访问登录页面要完成两件事:一是通过此页面获取初始的 Cookies,二是提取出 authenticity_token。

    在这里我们实现一个 token() 方法,如下所示:

     

    1

    2

    3

    4

    5

    6

    7

    from lxml import etree

     

    def token(self):

        response = self.session.get(self.login_url, headers=self.headers)

        selector = etree.HTML(response.text)

        token = selector.xpath('//div/input[2]/@value')[0]

        return token

    我们用 Session 对象的 get() 方法访问 GitHub 的登录页面,然后用 XPath 解析出登录所需的 authenticity_token 信息并返回。

    现在已经获取初始的 Cookies 和 authenticity_token,开始模拟登录,实现一个 login() 方法,如下所示:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    def login(self, email, password):

        post_data = {

            'commit': 'Sign in',

            'utf8': '✓',

            'authenticity_token': self.token(),

            'login': email,

            'password': password

        }

     

        response = self.session.post(self.post_url, data=post_data, headers=self.headers)

        if response.status_code == 200:

            self.dynamics(response.text)

     

        response = self.session.get(self.logined_url, headers=self.headers)

        if response.status_code == 200:

            self.profile(response.text)

    首先构造一个表单,复制各个字段,其中 email 和 password 是以变量的形式传递。然后再用 Session 对象的 post() 方法模拟登录即可。由于 requests 自动处理了重定向信息,我们登录成功后就可以直接跳转到首页,首页会显示所关注人的动态信息,得到响应之后我们用 dynamics() 方法来对其进行处理。接下来再用 Session 对象请求个人详情页,然后用 profile() 方法来处理个人详情页信息。

    其中,dynamics() 方法和 profile() 方法的实现如下所示:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    def dynamics(self, html):

        selector = etree.HTML(html)

        dynamics = selector.xpath('//div[contains(@class, "news")]//div[contains(@class, "alert")]')

        for item in dynamics:

            dynamic = ' '.join(item.xpath('.//div[@class="title"]//text()')).strip()

            print(dynamic)

     

    def profile(self, html):

        selector = etree.HTML(html)

        name = selector.xpath('//input[@id="user_profile_name"]/@value')[0]

        email = selector.xpath('//select[@id="user_profile_email"]/option[@value!=""]/text()')

        print(name, email)

    在这里,我们仍然使用 XPath 对信息进行提取。在 dynamics() 方法里,我们提取了所有的动态信息,然后将其遍历输出。在 prifile() 方法里,我们提取了个人的昵称和绑定的邮箱,然后将其输出。

    这样,整个类的编写就完成了。

    5. 运行

    我们新建一个 Login 对象,然后运行程序,如下所示:

     

    1

    2

    3

    4

    5

     

    if __name__ == "__main__":

        login = Login()

        login.login(email='cqc@cuiqingcai.com', password='password')

     

    在 login() 方法传入用户名和密码,实现模拟登录。

    可以看到控制台有类似如下输出:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    GrahamCampbell  starred  nunomaduro/zero-framework

    GrahamCampbell  starred  nunomaduro/laravel-zero

    happyAnger6  created repository  happyAnger6/nodejs_chatroom

    viosey  starred  nitely/Spirit

    lbgws2  starred  Germey/TaobaoMM

    EasyChris  starred  ageitgey/face_recognition

    callmewhy  starred  macmade/GitHubUpdates

    sindresorhus  starred  sholladay/squatter

    SamyPesse  starred  graphcool/chromeless

    wbotelhos  starred  tkadlec/grunt-perfbudget

    wbotelhos  created repository  wbotelhos/eggy

    leohxj  starred  MacGesture/MacGesture

    GrahamCampbell  starred  GrahamCampbell/Analyzer

    EasyChris  starred  golang/go

    mitulgolakiya  starred  veltman/flubber

    liaoyuming  pushed to  student  at  Germey/SecurityCourse

    leohxj  starred  jasonslyvia/a-cartoon-intro-to-redux-cn

    ruanyf  starred  ericchiang/pup

    ruanyf  starred  bpesquet/thejsway

    louwailou  forked  Germey/ScrapyTutorial  to  louwailou/ScrapyTutorial

    Lving  forked  shadowsocksr-backup/shadowsocksr  to  Lving/shadowsocksr

    qifuren1985  starred  Germey/ADSLProxyPool

    QWp6t  starred  laravel/framework

    Germey ['1016903103@qq.com', 'cqc@cuiqingcai.com']

    可以发现,我们成功获取到关注的人的动态信息和个人的昵称及绑定邮箱。模拟登录成功!

    6. 本节代码

    本节代码地址:https://github.com/Python3WebSpider/GithubLogin

    7. 结语

    我们利用 requests 的 Session 实现了模拟登录操作,其中最重要的还是分析思路,只要各个参数都成功获取,那么模拟登录是没有问题的。

    登录成功,这就相当于建立了一个 Session 会话,Session 对象维护着 Cookies 的信息,直接请求就会得到模拟登录成功后的页面。

    展开全文
  • Python # -*- coding: utf-8 -*- """ @Time: 2018/1/12 @Author: songhao @微信公众号: zeropython @File: index.py """ import re...
    Python
    # -*- coding: utf-8 -*- """ @Time: 2018/1/12 @Author: songhao @微信公众号: zeropython @File: index.py """ import requests import re def get_title(html): """" :param html: 源代码 :return: 返回源代码的title """ return re.search("<title>(.*?)</title>", html, re.S).group(1) def get_login(url, data): """ :param url: wordpress 后台登录地址 :param data: post传入的账号密码 :return: 返回已经登录的Session对象 """ s = requests.Session() s.post(url, data=data) return s if __name__ == '__main__': # 后台登录地址 login_url = "http://mac-wordpress.test/wp-login.php" # 登录的账号密码 data = {"log":"root", "pwd":"root"} # 登录wordpress s = get_login(login_url, data) # 利用session 请求后台的网址 r = s.get("http://mac-wordpress.test/wp-admin/upload.php") # 获取请求地址的标题 t = get_title(r.text) print(t)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    # -*- coding: utf-8 -*-
    """
    @Time: 2018/1/12
    @Author: songhao
    @微信公众号: zeropython
    @File: index.py
    """
    import requests
    import re
     
     
    def get_title(html):
        """"
        :param html: 源代码
        :return: 返回源代码的title
        """
        return re.search("<title>(.*?)</title>", html, re.S).group(1)
     
     
    def get_login(url, data):
        """
        :param url: wordpress 后台登录地址
        :param data: post传入的账号密码
        :return: 返回已经登录的Session对象
        """
        s = requests.Session()
        s.post(url, data=data)
        return s
     
    if __name__ == '__main__':
        # 后台登录地址
        login_url = "http://mac-wordpress.test/wp-login.php"
        # 登录的账号密码
        data = {"log":"root",
                "pwd":"root"}
        # 登录wordpress
        s = get_login(login_url, data)
     
        # 利用session 请求后台的网址
        r =  s.get("http://mac-wordpress.test/wp-admin/upload.php")
     
        # 获取请求地址的标题
        t = get_title(r.text)
        print(t)

    输出:




      zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
    展开全文
  • 我们先以一个最简单的实例来了解模拟登录后页面的抓取过程,其原理在于模拟登录后 Cookies 的维护。 本节目标 本节将讲解以 GitHub 为例来实现模拟登录的过程,同时爬取登录后才可以访问的页面信息,如好友动态、...
  • python3网络爬虫实战

    2019-02-08 12:52:43
    本书介绍了如何利用Python...再后介绍了爬虫的一些技巧,比如使用代理爬取和维护动态代理池的方法, ADSL 拨号代理的使用,图形、极验、点触、宫格等各类验证码的破解方泣,模拟登录网站爬取的方法及Cookies 池的维护。
  • 经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂...1. python模拟登录淘宝网页 2. 获取登录用户的所有订单详情 3. 学会应对出现验证码的情况 4. 体会一下复杂的模拟登录机制 ...
  • 经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂...1. python模拟登录淘宝网页 2. 获取登录用户的所有订单详情 3. 学会应对出现验证码的情况 4. 体会一下复杂的模拟登录机制 ...
  • Python爬虫实战(5):模拟登录淘宝并获取所有订单 2015/04/25 · Python · 2 评论 · 爬虫 分享到:6 原文出处: 崔庆才的博客(@崔庆才丨静觅) 欢迎分享原创到伯乐头条 Python爬虫...
  • 经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太...1. python模拟登录淘宝网页 2. 获取登录用户的所有订单详情 3. 学会应对出现验证码的情况 4. 体会一下复杂的模拟登录机制 探...
  • python实战】怎么用python自动登录CSDN

    万次阅读 多人点赞 2021-04-20 11:20:58
    爬虫模拟登录 1、设置网址链接 2、切换到账号密码登录 3、找到用户名密码的控件ID 4、注入用户名和密码 5、模拟登录点击 成功登录CSDN 先上效果 页面分析 CSDN登录页面如下图 引入selenium模块及驱动 ...
  • 根据超级鹰返回的数据,模拟坐标的点选,即可实现登录 一.准备工作 在开始之前,需要先注册一个超级鹰账号并申请一个软件ID,注册页面链接为:https://www.chaojiying.com/user/reg/,注册完成后需要在后台添加一...
  • 环境 python:3.7.4 python库:requests-html IDE:pycharm2019.3版本 ...模拟登录是为了拿到Cookies,这样可以像自己登录微博一样可以看所有内容,没有cookie只能看游客才能访问的内容 剩下的后面补充 ...
  • 经过多次尝试,模拟登录...1. python模拟登录淘宝网页 2. 获取登录用户的所有订单详情 3. 学会应对出现验证码的情况 4. 体会一下复杂的模拟登录机制 探索部分成果 1. 淘宝的密码用了AES加
  • python 爬虫实战

    千次阅读 2017-08-11 14:16:28
    1. Python爬虫实战一之爬取糗事百科段子 2. Python爬虫实战二之...5. Python爬虫实战五之模拟登录淘宝并获取所有订单 6. Python爬虫实战六之抓取爱问知识人问题并保存至数据库 7. Python爬虫实战七之计算

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

python3模拟登录实战

python 订阅