40.项目案例之利用爬虫技术获取需要帐号密码登录的网页中的数据

近期公司需要开发一个能够读取设备内部网页信息,我想到了用爬虫的方法来获取相关数据,具体代码如下:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import requests
import time


class GetData():
    # 初始化变量
    def __init__(self, url):
        self.url = url
        # 要用帐号密码登录,首先需要在先通过浏览器登录网页,然后在浏览器中查看Cookie值,将其放在请求头中
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
            "Cookie": "user_choose=block"
        }
        self.login()    # 首先先用Session方法来登录网页
        self.get_data() # 登录完成后,我们就可以去登录里面其它的网址了

    # 登录主页,将Cookie写入session对象中
    def login(self):
        self.session = requests.Session()
        response = self.session.get(self.url, headers=self.headers)

    # 用session对象的post来获取Ajax接口数据
    def get_data(self):
        get_url = "http://192.168.1.12/boafrm/formCpReportMonitor"
        resp = self.session.post(get_url, headers=self.headers)
        text = resp.text
        return text


if __name__ == '__main__':
    while True:
        main_url = 'http://192.168.1.12/index/index.htm'
        data = GetData(main_url)
        print('-'*50)
        print(data.get_data())
        time.sleep(1)

要完成上面程序正常运行:

1.首先,我们需要用帐号密码来完成正常的登录操作,登录完成后在浏览器中找到Cookie信息:

 

 2.然后,然后将该cookie信息放在程序的请求头headers中:

 

 3.由于我们登录的网站是用GET请求的,所以我们代码中也需要用get请求,并且首次请求时,我们需要带请求头访问,所以我们用requests.Session()中的get来访问。

 

 4.最后,由于我发现需要获取的数据是动态实时数据,所以是用了Ajax,那我就找那个利用Ajax技术的网址接口,我是这要查找的,用浏览器中的箭头工具在网页中查找对应的超链接文本,然后在下面的代码中会定位到相应的代码,在该代码中就可以找到对应的网页,然后打开该网页,再按F12,在浏览器下面的工具中可以看到实时刷新的网址,此时,我们点击最下面的一个,然后看右侧的请求头,

 

 

 

 按以上方法就能正确抓取到需要的数据了。

如有问题可以添加如下公众号进行交流。

posted @ 2020-06-09 16:48  Ubuntu1804  阅读(2126)  评论(0编辑  收藏  举报