Qt学习笔记——爬虫,利用cookie信息绕过登录爬取http协议网站内容

本来是想做一个爬取路由器ip数据的小爬虫,但奈何获取不来数据,百度了之后说是路由器网页是动态网页,无法爬取,个人对这方面不是很了解。

这边的demo爬取的数据是D站个人信息页面的数据

虽然还不知道有啥具体作用,先记下笔记吧

 

需要的头文件:

QNetworkAccessManager   网络操作类

QNetworkReply                     接收数据的类

QNetworkRequest                 存放请求信息的类

QNetworkCookie                    Cookie类

 

代码很简单,拿到cookie信息,在request中设置headers,将cookie保存进请求中,通过managerget函数获取数据

 

运行界面

 

下面是代码

头文件

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>

//vs2017编译器使用中文有bug,需要在头文件与cpp加上下面这段代码,变更编码
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

namespace Ui {
class MainWidget;
}

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MainWidget(QWidget *parent = 0);
    ~MainWidget();

private slots:
    void getMyDiliUserInfo();

private:
    Ui::MainWidget *ui;
};

#endif // MAINWIDGET_H

cpp文件

#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkCookie>
#include <QEventLoop>
#include <QMessageBox>
#include <QFile>

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

MainWidget::MainWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainWidget)
{
    ui->setupUi(this);
    setWindowTitle("Demo");
    connect(ui->pushButton, &QPushButton::clicked, this, &MainWidget::getMyDiliUserInfo);
}

MainWidget::~MainWidget()
{
    delete ui;
}

void MainWidget::getMyDiliUserInfo()
{
    QEventLoop loop;
    QNetworkAccessManager manager;
    QNetworkRequest request;

    QString url = "http://usr.005.tv/";

    //此处是登录之后的cookie信息,关于如何获取cookie,百度,此处就不给出cookie了
    QString cookie = ""; 
    
    //此处是浏览器伪装,此处信息为我的浏览器信息
    QString userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36";

    QByteArray cookieByte = cookie.toUtf8();

    QList<QNetworkCookie> list;
    list.push_back(QNetworkCookie(cookieByte));

    QVariant var;
    var.setValue(list);

    request.setUrl(QUrl(url));
    //设置Headers的信息,上下文类型,浏览器信息,以及cookie
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    request.setHeader(QNetworkRequest::UserAgentHeader, userAgent);
    request.setHeader(QNetworkRequest::CookieHeader, var);

    QNetworkReply * reply = manager.get(request);

    connect(&manager, &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);

    loop.exec();

    QFile file("F:/解压/data.txt");
    file.open(QIODevice::ReadWrite | QIODevice::Text);
    QTextStream out(&file);
    out << reply->readAll() << endl;
    file.close();

    QMessageBox::information(this, "Info", "获取完毕");

    reply->deleteLater();
}

 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值