「Python」爬虫-2.xpath解析和cookie,session

简介: > 本文主要介绍爬虫知识中的xpath解析以及如何处理cookies,将配合两个案例-视频爬取和b站弹幕爬取分别讲解。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天, 点击查看活动详情

前言

本文主要介绍爬虫知识中的xpath解析以及如何处理cookies,将配合两个案例-视频爬取和b站弹幕爬取分别讲解。

如果对爬虫的整体思维(确定目标网址 -> 请求该网址 ->读取response -> 处理response -> 写入文件/...)不大了解的话,可以先阅览一下的我的上一篇文章~,bs4解析的方式在上一篇有讲解。
「Python」爬虫-1.入门知识简介 - 掘金 (juejin.cn)

在上一篇 爬虫入门的知识中我们运用了bs4的方法对返回的页面源代码进行解析,从而拿到了我们想要的信息。这里再接着引出一种更为简单( 无脑的方法对页面信息进行提取--- xpath

xpath

xpath是xml文档中搜索内容一门语言,html是xml的一个子集。所以通过xpath就可以搜索(/提取)html中有价值的信息。

什么是XML?
可扩展标记语言,标准通用标记语言的子集,简称XML,是一种用于标记电子文件使其具有结构性的标记语言。——摘自百度百科。

XML是用来传输和存储数据的,不是用来显示数据的,所以XML文档不包含格式或者布局信息,没有HTML布局明确。更为详细的解说请参考 - 认识XML文档(一)什么是XML文档? - 知乎 (zhihu.com)

使用xpath方法前需要安装lxml模块

安装命令如下:

pip install lxml

xpath中最常见的方式就是
text() 拿文本,下面将为你慢慢道来xpath的使用方法~

首先在使用xpath之前需要引包,该语句是

from lxml import etree

这里以猪八戒网为例,https://beijing.zbj.com/search/f/

可以自己输入关键词,比如:前端开发,然后就可以看到一个一个的div盒子了,直接大胆猜测每一个商品的布局都类似。(毕竟没有开发人员会无聊到把结构类似的东西搞的花里胡哨吧?)
image.png

接下来使用打开开发者工具,F12键,这里以爬取商店的名字为例,使用xpath方法解析。可以利用下面这个小三角定位到商铺名字上去。

image.png
然后发现名字在一个<div class="shop-info">的盒子里。整个商铺信息和单个商铺信息的结构如下:

<div class="search-result-list-service"> 
    <div class="service-card-wrap"> 
    </div> 
    <div class="service-card-wrap"> 
    </div> 
    ... 
</div>

image.png

然后将鼠标放到最外面的大盒子中,即<div class="search-result-list-service"> 上去,然后右键->复制->复制xpath。(如果是Google Chrome也是一样的额,只不过是英文罢了)

image.png

xpath使用前需要实例化一个HTML对象,即etree.HTML(resp.text)

# 解析
html = etree.HTML(resp.text)
divs = html.xpath("//*[@id="__layout"]/div/div[3]/div/div[3]/div[4]/div[1]")

此时divs里面就会包含多个子<div>了,再利用个for循环,遍历每一个相同的div,./div[1]/div/a/div[2]/div[1]/div/text(),就可以拿到整个页面的商铺名字了。

下面以输入sass为例,挺久之前写的代码了,思想类似,可以直接照搬过来用。

import requests
from lxml import etree

url = "https://beijing.zbj.com/search/f/?kw=sass"
resp = requests.get(url)

# 解析
html = etree.HTML(resp.text)
divs = html.xpath("/html/body/div[6]/div/div/div[2]/div[5]/div/div")

for div in divs:    # 每一个服务商信息
    price = div.xpath("./div/div/a[2]/div[2]/div[1]/span[1]/text()")[0].strip("¥")
    title = "sass".join(div.xpath("./div/div/a[2]/div[2]/div[2]/p/text()"))
    com_name = div.xpath("./div/div/a[1]/div[1]/p/text()")       # [0]给放到列表里
    print(com_name)
关于xpath的相关语法,这里只罗列一部分。

这个地方的其实要熟悉还是得多练小案例的,可以尝试着不直接复制网页中的代码,而是自己写出来提取的代码。

//  表示的是后代
[] 谓语、条件
/ 往下选择元素
@ 提取元素
* 任意的节点
./  当前结点

xpath的顺序是从1开始的

res = tree.xpath("/html/body/ol/li/a[@href='dapao']/text()") # [@xxx=xxx]  # 属性筛选
# 拿到属性值 :@属性

session与cookie

在爬取一些页面的时候往往需要用户先登录,然后才能看到其网站里面的信息。而浏览器中有个一个东西可以表示你的登录状态,这个玩意就是cookie了。

关于cookie的详解,可以自行查资料了解一下~

在这里只需要知道这个东西可以表示你的登录状态就行,记录了cookie就不用频繁的多次登录了。

cookie的查找,可以先F12键,然后刷新一下网页,打开工具栏中的网络,随便点击一个请求进去,点击标头(headers),就可以看到cookie了。

image.png

如果是获取某个小说网站的书架信息,往往需要在headers里面加入cookie信息。

在看到书架信息之前需要先登录该网站,这里扯到到session(会话),就当做是一个用户向服务器发送请求,然后服务器返回信息的整个过程吧。

向某一个登录网站的api发送数据,需要用到session=requests.session(),然后
session.post(url, data=data),就可以实现登录的功能了。

这里用到的api是https://passport.17k.com/login/

下面登录并获取书架返回的html代码如下:

import requests

# 会话
session = requests.session()
data = {
    "loginName": "xxxxxxxx",
    "password": "xxxxxxxxx"
}

# 登录
url = "https://passport.17k.com/login/"
sp = session.post(url, data=data)

resp = session.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919')
print(resp.json())

cookie一般包装在headers里面,随请求一起发送给服务器,模板如下:

resp = request.get("https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919",headers={
    "Cookie":"abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
})
本次的爬虫知识就写到这儿了,后续继续更新多线程以及selenium的知识吖~,如果对你有用的话,就点个赞吧~😋

往期好文推荐🪶

「Python」爬虫-1.入门知识简介 - 掘金 (juejin.cn)

「MongoDB」Win10版安装教程

「Python」数字推盘游戏

「Python」sklearn第一弹-标准化和非线性转化

「Python」turtle绘制图形🎈

「Python」Pandas-DataFrame的相关操作二

相关文章
|
2天前
|
JavaScript 前端开发 Java
【JavaEE】使Cookie与Session失效-Servlet上传文件操作-优化表白墙(下)
【JavaEE】使Cookie与Session失效-Servlet上传文件操作-优化表白墙
5 0
|
2天前
|
存储 前端开发 Java
【JavaEE】使Cookie与Session失效-Servlet上传文件操作-优化表白墙(上)
【JavaEE】使Cookie与Session失效-Servlet上传文件操作-优化表白墙
8 0
|
2天前
|
存储 JSON 前端开发
【JavaEE】Cookie与Session的前后端交互-表白墙登录设计
【JavaEE】Cookie与Session的前后端交互-表白墙登录设计
6 0
|
2天前
|
存储 网络协议 测试技术
【如何学习Python自动化测试】—— Cookie 处理
【如何学习Python自动化测试】—— Cookie 处理
7 1
|
2天前
|
数据采集 Web App开发 数据处理
Lua vs. Python:哪个更适合构建稳定可靠的长期运行爬虫?
Lua vs. Python:哪个更适合构建稳定可靠的长期运行爬虫?
|
2天前
|
存储 安全 Java
JavaWeb中的Session和Cookie
本文介绍了JavaWeb中的会话跟踪技术,主要讨论了Cookie和Session的概念、用途、设置与获取方法以及生命周期。Cookie是客户端技术,用于在用户浏览器中存储信息,通常用于保持用户登录状态,有效期可设置。Session则保存在服务器端,用于跟踪用户状态,例如登录信息,生命周期可通过设置最大不活动时间控制。两者之间的主要区别在于数据存储位置和安全性,Cookie数据在客户端,可能存在安全风险,而Session数据在服务器端,相对较安全但会占用服务器资源。
|
2天前
|
XML 存储 数据格式
python path解析基础
python path解析基础
15 0
|
2天前
|
数据采集 Python
Python HTML解析详解
Python HTML解析详解
11 0
|
2天前
|
数据采集 Web App开发 Java
Python 爬虫:Spring Boot 反爬虫的成功案例
Python 爬虫:Spring Boot 反爬虫的成功案例
|
2天前
|
数据采集 Python
使用Python实现简单的Web爬虫
本文将介绍如何使用Python编写一个简单的Web爬虫,用于抓取网页上的信息。通过分析目标网页的结构,利用Python中的requests和Beautiful Soup库,我们可以轻松地提取所需的数据,并将其保存到本地或进行进一步的分析和处理。无论是爬取新闻、股票数据,还是抓取图片等,本文都将为您提供一个简单而有效的解决方案。

推荐镜像

更多