爬虫基础(案例:爬取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)