python爬虫之urllib.request和cookie登录CSDN

简介: 最近为了爬取自己想要的东西,又开始回忆起了python爬虫。首先,需要找到登录页面的url。

最近为了爬取自己想要的东西,又开始回忆起了python爬虫。

首先,需要找到登录页面的url。

https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn

用基本的urllib抓取网页代码发现提交的表单代码

                  <form id="fm1" action="/account/verify;jsessionid=78D8B598F6A7667130715F7491D6AFDD.tomcat1" method="post">

                    <input id="username" name="username" tabindex="1" placeholder="输入用户名/邮箱/手机号" class="user-name" type="text" value=""/>
                    <div class="mobile-auth" style="display:none"><span>该手机已绑定账号,可使用  </span><a href="" id="mloginurl" class="mobile-btn" >手机验证码登录</a></div>
                    <input id="password" name="password" tabindex="2" placeholder="输入密码" class="pass-word" type="password" value="" autocomplete="off"/>




                            <div class="error-mess" style="display:none;">
                                <span class="error-icon"></span><span id="error-message"></span>
                            </div>



                    <div class="row forget-password">
                        <span class="col-xs-6 col-sm-6 col-md-6 col-lg-6">
                            <input type="checkbox" name="rememberMe" id="rememberMe" value="true" class="auto-login" tabindex="4"/>
                            <label for="rememberMe">下次自动登录</label>
                        </span>
                        <span class="col-xs-6 col-sm-6 col-md-6 col-lg-6 forget tracking-ad" data-mod="popu_26">
                            <a href="/account/fpwd?action=forgotpassword&service=http%3A%2F%2Fmy.csdn.net%2Fmy%2Fmycsdn" tabindex="5">忘记密码</a>
                        </span>
                    </div>
                    <!-- 该参数可以理解成每个需要登录的用户都有一个流水号。只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程。否则,没有流水号的情况下,webflow会认为用户还没有进入webflow流程,从而会重新进入一次webflow流程,从而会重新出现登录界面。 -->
                    <input type="hidden" name="lt" value="LT-9098-f0M45K9ONcaHCXC7e00ykfOpTxPheC" />
                    <input type="hidden" name="execution" value="e1s1" />
                    <input type="hidden" name="_eventId" value="submit" />
                    <input class="logging" accesskey="l" value="登 录" tabindex="6" type="button" />

                  </form>

注意到其中有个jsessionid。

另外通过fiddler抓取的登录信息中包含username, password, lt, execution, _eventId信息

这里写图片描述

在抓取的代码中,csdn也对lt等信息做了注释。
并且包含本表单信息的url是

https://passport.csdn.net/account/verify

于是猜想这几个参数就是登录的关键。那如何获取呢?

关于jsessionid, 在登录主页多试了几次发现每次都不一样,lt与exection也都在变化,于是猜想这些数据是需要动态获取的。于是更改代码如下:


import urllib.request
import urllib.parse
import urllib.error
import http.cookiejar
import re
import sys

class CsdnCookie:
    def __init__(self):
        self.login_url = 'https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn'
        self.verify_url = 'https://passport.csdn.net/account/verify'
        self.my_url = 'https://my.csdn.net/'
        self.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
        self.user_headers = {
            'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
            'Accept - Encoding': "gzip, deflate, br",
            'Connection': "Keep-Alive",
            'User-Agent': self.user_agent
        }
        self.cookie_dir = 'C:/Users/ecaoyng/Desktop/PPT/cookie_csdn.txt'



    def get_lt_execution(self):

        cookie = http.cookiejar.MozillaCookieJar(self.cookie_dir)
        handler = urllib.request.HTTPCookieProcessor(cookie)
        opener = urllib.request.build_opener(handler)
        # request = urllib.request.Request(self.login_url, headers=self.user_headers)
        try:
            response = opener.open(self.login_url)
            page_src = response.read().decode(encoding="utf-8")
            pattern = re.compile(
                'login.css;jsessionid=(.*?)".*?name="lt" value="(.*?)" />.*?name="execution" value="(.*?)" />', re.S)
            items = re.findall(pattern, page_src)
            print(items)
            print('='*80)
            values = {
                'username' : "username",
                'password' : "password",
                'lt' : items[0][1],
                'execution' : items[0][2],
                '_eventId' : "submit"
            }
            post_data = urllib.parse.urlencode(values)
            post_data = post_data.encode('utf-8')
            opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')]
            self.verify_url = self.verify_url + ';jsessionid=' + items[0][0]
            print('=' * 80)
            print(self.verify_url)
            print('=' * 80)
            response_login=opener.open(self.verify_url,post_data)
            print(response_login.read().decode(encoding="utf-8"))

            for i in cookie:
                print('Name: %s' % i.name)
                print('Value: %s' % i.value)
            print('=' * 80)
            cookie.save(ignore_discard=True, ignore_expires=True)

            my_page=opener.open(self.my_url)
            print(my_page.read().decode(encoding = 'utf-8'))
        except urllib.error.URLError as e:
            print('Error msg: %s' % e.reason)

    def access_other_page(self):
        try:
            cookie = http.cookiejar.MozillaCookieJar()
            cookie.load(self.cookie_dir, ignore_discard=True, ignore_expires=True)
            get_request = urllib.request.Request(self.my_url, headers=self.user_headers)
            access_opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
            get_response = access_opener.open(get_request)
            print('='*80)
            print(get_response.read().decode(encoding="utf-8"))
        except Exception as e:
            print('Error msg when entry other pages: %s' % e.reason())


if __name__ == '__main__':
    print(sys.getdefaultencoding())
    print('='*80)
    cookie_obj=CsdnCookie()
    # cookie_obj.get_lt_execution()
    cookie_obj.access_other_page()

下面是获取到的csdn的cookie

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.

.csdn.net   TRUE    /   FALSE       AU  1FF
.csdn.net   TRUE    /   FALSE   xxx BT  xxx
.csdn.net   TRUE    /   FALSE       UD  Python%E7%88%B1%E5%A5%BD%E8%80%85
.csdn.net   TRUE    /   FALSE   1543915400  UE  "username@163.com"
.csdn.net   TRUE    /   FALSE   1543915398  UN  username
.csdn.net   TRUE    /   FALSE       UserInfo    2MufVKKubW9%2FasttTNA6s3WQr%2BaBa08G3ijawR7NBVftvqoXgXWKvKxjvv2g3YMtJINvNyXOlJM%2FMpWjlo3nxZmMLRQbY5D51X2sJgag7QtsKAGN6NBORCEWVZ1W0BzbQ%2FFZwXUiAjK7CwakS5fGJg%3D%3D
.csdn.net   TRUE    /   FALSE       UserName    username
.csdn.net   TRUE    /   FALSE       UserNick    nickname
.csdn.net   TRUE    /   FALSE       access-token    012f25c0-3341-444d-864c-3a1f497948c9
.csdn.net   TRUE    /   FALSE   1735689600  dc_session_id   10_1512379399618.695892
.csdn.net   TRUE    /   FALSE   1735689600  uuid_tt_dd  10_9929133460-1512379399943-185666
passport.csdn.net   FALSE   /   TRUE        CASTGC  TGT-151925-6sfuatdEVoSydhGYa1jjSpaMxCzxmKVOI9dfLECPmqfdMqxDuT-passport.csdn.net
passport.csdn.net   FALSE   /   FALSE       JSESSIONID  42458334234E0ED744ED275311851BE4.tomcat1
passport.csdn.net   FALSE   /   TRUE    1514971397  LSSC    LSSC-1192363-wi3f7cybBifLidkrZxeiGMpCjUyOkE-passport.csdn.net
目录
相关文章
|
6天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
7天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
16天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
21天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
28天前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
116 6
|
5月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
248 4
|
5月前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
6月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
101 4
|
3月前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
216 66