今天搞一个小说网站,搞到一些只能登陆后才能获得的信息,比如这个网站,搞到某个用户下的所有书架信息。

【小说网站 - 抓取登陆后的数据,cookie操作】_ajax


先登录

【小说网站 - 抓取登陆后的数据,cookie操作】_表单_02


上面是一个表单,一般都是post了一些数据到某个地址,于是我们可以通过调试手段抓取其登录信息。

【小说网站 - 抓取登陆后的数据,cookie操作】_表单_03


【小说网站 - 抓取登陆后的数据,cookie操作】_用户信息_04


【小说网站 - 抓取登陆后的数据,cookie操作】_ajax_05


登录信息抓到了,表单信息也有,而且请求的url是:https://passport.17k.com/ck/user/login接下来就是看看书架信息。

【小说网站 - 抓取登陆后的数据,cookie操作】_ajax_06


每次点击书架,页面都会刷新,于是再来看看点击后的触发的ajax js操作。

【小说网站 - 抓取登陆后的数据,cookie操作】_爬虫_07


【小说网站 - 抓取登陆后的数据,cookie操作】_爬虫_08


原来书架信息是json数据返回的,我们也能得到其请求的url是:https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919

除此之外还可以得到cookies的信息

于是测试代码如下:

import requests

data = {
"loginName": "xinghaiqianxun",
"password": "Gauss@234"
}

def test():
# step 1: 登录
url = "https://passport.17k.com/ck/user/login"

session = requests.session() # session 记录绘画中的用户信息的cookies,这样的话,能保持回话过程(一连串的请求都含有用户信息)
resp = session.post(url, data)
# print(resp.text)
print(resp.cookies)

# step 2: 获得书架上的信息,
# 方法一:直接用session去访问,自带有cookies
# resp = session.get("https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919") # 回话自带有cooikes
# 方法二:从浏览器直接复制这一串cookies
# resp = requests.get("https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919") # 这样一个全新的请求,不带用户信息,就无法获得
resp = requests.get("https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919",
headers={"Cookie": "GUID=a0fe44ca-216a-41c9-ba45-4d77576b84e6; BAIDU_SSP_lcr=https://www.baidu.com/link?url=Veyn1NHYtQQUwMe1aqnlb8caXqQqqHGgRLwW-zM8tJC&wd=&eqid=a354907f001c012a0000000261cb0df8; c_channel=0; c_csc=web; Hm_lvt_9793f42b498361373512340937deb2a0=1640697343,1640697589,1640698757; accessToken=avatarUrl%3Dhttps%253A%252F%252Fcdn.static.17k.com%252Fuser%252Favatar%252F15%252F75%252F60%252F87496075.jpg-88x88%253Fv%253D1640697433000%26id%3D87496075%26nickname%3Dxinghaiqianxun%26e%3D1656296101%26s%3D5ade340effce8c26; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2287496075%22%2C%22%24device_id%22%3A%2217e012eadc4142-0e5ad7061ebfdd-4303066-921600-17e012eadc581%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%2C%22first_id%22%3A%22a0fe44ca-216a-41c9-ba45-4d77576b84e6%22%7D; Hm_lpvt_9793f42b498361373512340937deb2a0=1640744444"}) # 这样一个全新的请求,不带用户信息,就无法获得
print(resp.json())

if __name__ == '__main__':
# 以后任何需要登录后次啊能获得的信息,就需要cookies,先登录,就可以有cookies了
test()