Python爬虫入门教程四:爬虫实战之微博爬虫模拟登录

环境

python:3.7.4

python库:requests-html

IDE:pycharm2019.3版本

爬取网址: https://weibo.cn

抓包分析工具Fiddle

chrome浏览器

分析过程

模拟登录是为了拿到Cookies,这样可以像自己登录微博一样可以看所有内容,没有cookie只能看游客才能访问的内容

第一步:清除chrome的登录cookie

chrome->历史记录->清除浏览记录->选择cookie

这样才能最真实的模拟登录场景

第二步:打开weibo.cn网站进入登录界面但不要输入账号密码

第三步:打开Filddle(Filddle的设置请查看入门系列一)

第四步:输入账号密码登录

如果Fiddle显示内容过多,可以右击选择remove->all sessions再点击登录抓包

找到登录的数据包

双击进入,选择右边的WebForms

Python爬虫入门教程四:爬虫实战之微博爬虫模拟登录_第1张图片

这些就是我们需要构造的post请求参数

下面就可以编写代码模拟登录去获取cookie了

代码实现

下面放出代码,代码中只需要根据获取的form表单构造post请求的参数和浏览器头部,然后输入微博账号和密码即可

另外需要说明一下,用自己的电脑模拟登录极有可能出现一种错误叫做

Error: HTTPSConnectionPool(host='passport.weibo.cn', port=443): Max retries exceeded with url

 这个有两种解决方法

第一种是post请求代码改为

session.post(url=url, data=post_data, headers=headers, verify=False)

 第二种是把post改为循环请求,如果获取不到结果就sleep五秒继续请求,直到成功

最后获取的是cookies和mid,mid是自己微博账号的id,微博是根据id来区分用户的

#!/bin/bash python
# -*- coding: UTF-8 -*-

from requests_html import HTMLSession
import traceback


class GetCookies(object):
    def __init__(self, username, password):
        self.username = username
        self.password = password

    # 通过fiddler抓包分析模拟登陆的form表单,获取cookies和自己账号的uid
    def get_cookies(self):
        try:
            session = HTMLSession()
            url = 'https://passport.weibo.cn/sso/login'
            post_data = {
                'username': self.username,
                'password': self.password,
                'savestate': '1',
                'r': 'https://weibo.cn/',
                'ec': '0',
                'pagerefer': 'https://weibo.cn/pub/',
                'entry': 'mweibo',
                'wentry': '',
                'loginfrom': '',
                'client_id': '',
                'code': '',
                'qq': '',
                'mainpageflag': '1',
                'hff': '',
                'hfp': ''
            }
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
                'Referer': 'https://passport.weibo.cn/signin/login?entry=mweibo&r=https%3A%2F%2Fweibo.cn%2F&backTitle=%CE%A2%B2%A9&vt=',
                'Host': 'passport.weibo.cn',
                'Origin': 'https://passport.weibo.cn',
                'Content-Type': 'application/x-www-form-urlencoded',
                'Connection': 'close'
            }
            r = session.post(url=url, data=post_data, headers=headers)
            mid = r.json()['data']['uid']
            return r.cookies, mid
        except Exception as e:
            print('Error:', e)
            traceback.print_exc()

 

你可能感兴趣的:(Python爬虫)