一、前端:模板层的html、js、css写在index.html文件里面
1.html
2.css样式
3.js:F12控制台,js代码的位置,可以直接输入alert(123),跟踪一些代码,查看他的js加密,可以在这个位置上输入一些代码,在他的基础上注入代码,
可以查看他的变量,暴露他的方法什么的
二、顶点小说:F12网络
1.请求标头
User-Agent:后边跟的相当于自我介绍
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
referer:上一个请求页面的链接
referer: https://www.baidu.com/link?url=OYwuVlZfXc4rlAhH81YiU-GT2xN1i0m_U56ADrzx1-HhWXDpg9VdxrIeWn1tVy8_&wd=&eqid=b4ba094b0000b96100000006637c9470
Host:请求服务器,当前的资源来自于哪个服务器
Host: m.23wx.cc
http、https多了一个正负验证
共同点:这两个都是无状态,无状态协议:他不知道你是谁,这个协议本身无法传递用户的信息
2.cookie是用户身份令牌,本质是一把钥匙 客户端
登录的本质就是生成cookie
例如:李白登录淘宝购买东西-输入用户名、密码-后台验证(实际上验证两次,第一次用户名、密码输入的样式对不对,通过后,会把信息传递到后台第二次验证,
传到后台查数据库,看看李白注册的用户名、密码对不对,如果对的话,将会在李白的浏览器生成一个cookie,这个cooie里面有一个session id。
session id:李白 本地是一串乱码,相当于一把钥匙,那么李白的信息存在哪里呢?李白的信息存在淘宝的服务器上。为什么李白本地只存在了一串乱码,
信息存到服务器上呢?因为存在本地十不可以的,开发的东西会人为客户端的一切十不安全的。本地只存在session id:李白和名字这两个。
购买流程实际上发生在服务器上,本身李白十没法处理的。在淘宝服务器上拿到数据在淘宝服务器上用,用户是看不见的。这样李白就可以完成购买。
session 在服务器端
cookie是在几个网站页面共享的,无论李白点到哪个页面,只要李白没有清cookie,这几个页面都知道他是李白。在用户本地,也就是客户端。
session机制十依赖于cookie机制产生的,必须首先cookie能用,才会有session的事情,也就是说本地生成的cookie里面本身会带一个钥匙session id,
session的箱子是在服务器端,你就可以借助cookie在各个页面共享这把钥匙。
cookie本身还有追踪用户行为的作用,本身点击了哪些网站,哪些商品,他都会知道,比如电机的次数,浏览的频率等。这样的话有助于它构建用户画像。
总结:cookie是什么?
答:
cookie存在于客户端本地,实际上是浏览器的资源,本身在浏览器里面,它的作用就是辅助http、https共享用户身份,追踪用户身份的一个身份令牌,
相当于一个身份证,但是cookie里面一般只存很少的信息和一个session id,你的主要信息是放在服务器端的,如果真的需要别的一些关键信息的话,
他会拿你的session id去服务器端寻找,然后在服务器端去用,而不会让你看见,就这么一个机制,主要资源不在本地是为了防止你对这个资源进行篡改,
从而达到一些目的,比如你没有开通会员,放在本地的话,万一自己改成会员,岂不是对他造成了损失。所以他把这些关键信息放在服务器端了,你没法篡改,
你只有一把钥匙,你只能查,拿来用,而不能对他进行任何修改,这就是cookie,捏本地叫cookie,服务器那端叫session id。
3.想要退出自己登陆的csdn?
直接清除cookie就行了,点击网页有上角的三个点,选择设置-隐私搜索和服务-点击一下清除浏览数据-勾选Cookie和其他站点数据-点击立刻清除
Cookie: PHPSESSID=c0842bd1e6347ba5d785554adf9e78d7; Hm_lvt_9721db7bd190f0cb23e5267d9f8eaeb1=1669108855; Hm_lpvt_9721db7bd190f0cb23e5267d9f8eaeb1=1669109361
cookie里面除了有session id之外,还存了一个加密的字符串,你必须传给我正确的加密字符串,才会让你访问这个页面,也就是说我们现在有一个加密字符串,
可能就藏在cookie里面,那就需要查找它cookie在哪里生成的,什么时候把这个字符串塞进去的,这个字符串是怎么来的,需要知道这些问题,我们就涉及到一个
任务就是追踪cookie生成过程,现在只是了解有这么一回事就行。
第二点就是有些网站必须登录之后,才能去抓取信息,比如天眼查。你如果不登陆的话,有些信息可能都不展示。那怎么抓?
cookie池塘:实际上就是一个数据库,里面存了用户名和密码。
三、xpath抓取顶点小说3页数据
import requests
from lxml import etree
import pymysql
headers = {
'Host': 'www.23us.co',
'Referer': 'https://www.baidu.com/link?url=Kf8hqBe68nV-DipI3bExcurGlRpGxvq2j0kBbVOrk37&wd=&eqid=91dc6e33001b84210000000263787966',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
db = pymysql.connect(user='root',password='123456',db='顶点小说')
cursor = db.cursor()
def get_max_page(urls):
source = requests.get(urls).content.decode('gbk')
max_page = etree.HTML(source).xpath('//a[@class="last"]/text()')
return int(max_page[0])
def save_chapter_list(**kwargs):
book_name = kwargs.get('book_name','未取到')
book_id = kwargs.get('book_id','未取到')
status = kwargs.get('status',0)
chapter_list_url = kwargs.get('chapter_list_url','未取到')
sql = 'insert into book(book_name,book_id,status,chapter_list_url) values ("{}","{}","{}","{}")'.format(book_name,book_id,status,chapter_list_url)
cursor.execute(sql)
db.commit()
def save_book(**kwargs):
chapter_name = kwargs.get('chapter_name','未取到')
bid = kwargs.get('bid','未取到')
status = kwargs.get('status',0)
chapter_contents = kwargs.get('chapter_contents','未取到')
chapter_url = kwargs.get('chapter_url','未取到')
sql = 'insert into chapters(chapter_name,bid,status,chapter_contents,chapter_url) values ("{}","{}","{}","{}","{}")'.format(chapter_name,bid,status,chapter_contents,chapter_url)
print(sql)
cursor.execute(sql)
db.commit()
pass
def get_book_chapter_list(urls):
source = requests.get(urls).content.decode('gbk')
hrefs = etree.HTML(source).xpath('//tr/td[1]/a')
for i in hrefs:
hrefs = i.xpath('@href')[0]
book_name = i.xpath('text()')[0]
book_id = hrefs.split('/')[-1]
chapter_list_url = 'http://23us.co/html/{}/{}/'.format(book_id[:2],book_id)
save_chapter_list(book_name=book_name,book_id=book_id,status=0,chapter_list_url=chapter_list_url)
yield chapter_list_url
def get_contents(urls):
import re
source = requests.get(urls).content.decode('gbk')
demo = re.compile('http://23us\.co/html/\d+/(\d+)/\d+\.html')
book_id = demo.findall(source)[0]
title = etree.HTML(source).xpath('//h1/text()')[0]
contents = ''.join(etree.HTML(source).xpath('//dd[@id="contents"]/text()'))
return save_book(bid=book_id,chapter_name = title,chapter_contents=contents,chapter_url = urls)
def get_contents_title(urls):
source = requests.get(urls).content.decode('gbk')
hrefs = etree.HTML(source).xpath('//tr/td/a/@href')
if len(hrefs)>0:
for href in hrefs:
chapter_url = urls+href
get_contents(chapter_url)
for type in range(1,11):
first_page_url = 'http://23us.co/class/{}_1.html'.format(type)
max_page = get_max_page(first_page_url)
for page in range(1,max_page+1):
every_page_url = first_page_url.split('_')[0]+'_'+str(page)+'.html'
chapter_list_url = get_book_chapter_list(every_page_url)
for urls in chapter_list_url:
get_contents_title(urls)