关于更深层次的爬虫应用开发介绍

一般来说都会用到Requests来进行模拟登录,需要登录之后才能进行页面爬取的情况,属于深层次的网页爬取,模拟登录由于涉及到用户名和密码等隐私数据,一般网站的设计人员会使用Post方式向网站的后台进行数据提交,密码也不是明码传输,而是加密后传输。需要使用浏览器的开发者工具,拦截网络请求,从而分析出登录提交的URL地址。分析出登录的URL地址后只是迈出了关键的一步,实际上现在的网站为了应对爬虫爬取,避免别有用心的人恶意登录和注册,大多数都会采用验证码技术。现在普遍使用验证码的技术除了图片验证码外,还有短信验证码、滑动拼图、图标点选等多种方式。有些验证码可以通过机器学习等技术手段解决,有些只能依靠打码平台人工识别。 网络传输协议HTTP是一种无状态的协议。使用用户登录来举例,用户登录向Web服务端请求,验证通过后跳转到主页,然后连接会断开,不会一直持续连接。再次发送请求,HTTP协议无法知晓用户已经登录过,无记忆功能。为了解决状态保持的问题,在Web开发中常用CookiesSession来实现状态保持机制。

下面来简单介绍一下什么是cookie以及他的机制

存储cookie是浏览器提供的功能。cookie其实是存储在浏览器中的纯文本,浏览器的安装目录下会专门有一个cookie文件夹来存放各个域下设置的cookie。 当网页要发http请求时,浏览器会先检查是否有相应的cookie,有则自动添加在request 请求中header的cookie字段中。这些是浏览器自动帮我们做的,而且每一次http请求浏览器都会自动帮我们做。存储在cookie中的数据,每次都会被浏览器自动放在http请求中,如果这些数据并不是每个请求都需要发给服务端的数据,浏览器这样设置自动处理无疑增加了网络开销;但如果这些数据是每个请求都需要发给服务端的数据(比如身份认证信息),浏览器这样设置自动处理就大大免去了重复添加操作。所以对于那些设置“每次请求都要携带的信息(最典型的就是身份认证信息)”就特别适合放在cookie中,其他类型的数据就不适合了。

此外还有Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 当程序需要为某个客户端的请求创建一个Session时,服务器首先检查这个客户端的请求(cookie)里是否已包含了一个Session标识(称为Session Id)。如果已包含则说明以前已经为此客户端创建过Session,服务器就按照Session Id把这个session检索出来使用(检索不到,会新建一个);如果客户端请求不包含Session Id,则为此客户端创建一个Session并且生成一个与此Session相关联的Session id,Session Id的值应该是一个既不会重复,又不容易被找到规律的方式以仿造的字符串,这个Session Id将被在本次响应中返回给客户端保存。

以下是对网页进行登录的深层爬取代码

1.对豆瓣进行爬取

import requests
headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 SLBrowser/9.0.6.5061 SLBChan/105 SLBVPV/64-bit",
        "Cookie":'ll="108288"; bid=UhFg4xbgmwA; __utma=30149280.2007896199.1752813231.1752813231.1752813231.1; __utmc=30149280; __utmz=30149280.1752813231.1.1.utmcsr=cn.bing.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __utmt=1; last_login_way=phone; ap_v=0,6.0; push_noty_num=0; push_doumail_num=0; __utmv=30149280.28997; user_data={%22area_code%22:%22+86%22%2C%22number%22:%2218747193778%22%2C%22code%22:%223008%22}; vtoken=undefined; __utmb=30149280.10.10.1752813231; login_start_time=1752813440782'
}
def login():
    try:
        url="https://accounts.douban.com/j/mobile/login/basic"
        parm={
            "name":"187",
            "password":"23123",
            "remember":True
        }
        s = requests.session()
        r = s.post(url,data=parm,headers=headers)
        r.raise_for_status()
        return s
    except Exception as err:
        print(err)
def get_html(s,url):
    try:
        r=s.get(url,headers=headers)
        r.encoding=r.apparent_encoding
        r.raise_for_status()
        print("ID" in r.text)
    except Exception as err:
        print(err)
if __name__=="__main__":
        session=login()
        print("登陆成功!")
        url="https://www.douban.com/people/289971477"
        get_html(session,url)
        print("获取个人主页成功!")

大家可以对个人信息以及账号密码自行更改,换成自己的,这个代码可以对简单的网站进行深层爬取从而进行登录操作,但对于一些反爬比较强的网站是用不了的。

2.对包头师范学院教务处爬取

import requests
headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 SLBrowser/9.0.6.5061 SLBChan/105 SLBVPV/64-bit",
        "Cookie":'route=bac86a4f0796578ef86a8c36f6d8fe1d; _webvpn_key=; webvpn_username=; JSESSIONID=mQkcVqVMcKlRuM8EzBIa1KxCG375NQ1wq8HEOWkIaJe0i17_DFDm!444696921'
}
def login():
    try:
        url="https://authserver-443.webvpn.bttc.edu.cn/authserver/login"
        parm={
            "username":"22",
            "password":"w123123",
            "remember":True
        }
        s = requests.session()
        r = s.post(url,data=parm,headers=headers)
        r.raise_for_status()
        return s
    except Exception as err:
        print(err)
def get_html(s,url):
    try:
        r=s.get(url,headers=headers)
        r.encoding=r.apparent_encoding
        r.raise_for_status()
        print("包头师范学院" in r.text)
    except Exception as err:
        print(err)
if __name__=="__main__":
        session=login()
        print("登陆成功!")
        url="https://webvpn.bttc.edu.cn/"
        get_html(session,url)
        print("获取个人主页成功!")

跟第一个豆瓣爬取同理,大家自行参考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值