欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬虫基础(案例:爬取17K小说个人书架信息)

程序员文章站 2022-06-05 18:45:47
...

爬取思路:
1、进入17K官网,(先不要登录),然后点击书架,这时会弹出登录页面。
2、进行抓包,然后输入登录的账号密码(请勿使用第三方登录)
3、登录成功后,找到名称为login的包,这样就得到了登录的URL,Form data为请求时需要提交的信息。
4、使用post请求该URL,提交的信息data为Form data中的信息。
5、登录成功后,可以获得该URL的cookie信息,找到其中的accessToken
6、找到书架书籍所在的链接,使用get请求,请求头中要带有刚刚获取的accessToken
7、这样就得到了包含信息的json数据。

import requests
import json
#获取登录链接,登录网站的同时进行抓包,在Network中的XHR中可以找到,
login_url = "https://passport.17k.com/ck/user/login"
headers = {
    #User-Agent可以随便在一个网址上找一个
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"
    }
#Post请求需要传入数据,待传入的数据可以在Headers中的Form Data中找到
data = {
    "loginName": "15565827813",
    "password": "zhao15565827813"
    }

login_res =requests.post(login_url, headers = headers,data = data)

#看一下状态码,如果是200,说明访问成功
print(login_res.status_code)

#访问成功后,我们需要找cookie中的accessToken,
#该信息保存在headers中,可以打印查看,然后找到 accessToken
se_res = login_res.headers['Set-Cookie']
se_res_split = se_res.split(";")
cookie = ""
for i in se_res_split:
    if("accessToken" in i):
        cookie = i.split(",")[-1].strip()
        break
#至此我们已经得到了accessToken,把它命名为cookie并传给访问书架的函数
# print(cookie)


def visit_book(ck):
    #发现书架书籍信息都在该URL中,请求方式为get,可以直接访问
    url = "https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919"
    headers = {
        #User-Agent可以随便在一个网址上找一个
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
        "cookie":ck
    }
    res = requests.get(url,headers = headers)
    print(res.text)
#这样就访问成功了,如果不添加cookie,无法访问,因为没有身份信息
visit_book(ck = cookie)