【python爬虫】python的requests模块使用`Session`对象可以保持会话状态,自动处理Cookie等信息

1. 请求发送

网络爬虫的第一步是发送HTTP请求。Python中的requests库是发送请求的首选工具,它简单易用且功能强大。

使用requests

import requestssession = requests.Session()
session.headers = {"User-Agent": "Mozilla/5.0",# 其他请求头
}
response = session.get("目标URL")

使用Session对象可以保持会话状态,自动处理Cookie等信息。

自动处理编码

响应内容可能使用不同的编码,正确处理编码是获取准确数据的关键。

解决方案
  1. 指定编码:根据网页的meta标签指定编码。
  2. 自动检测编码:使用requests库的apparent_encoding属性自动检测编码。
response.encoding = response.apparent_encoding

2. 数据解析

获取到网页内容后,下一步是解析HTML数据。lxml库的etree模块是一个强大的HTML解析器。

使用lxml.etree

from lxml import etreehtml = etree.HTML(response.text)
title = html.xpath("//title/text()")[0]

xpathlxml.etree提供的强大工具,可以高效地从HTML中提取数据。

3. URL拼接

在爬取分页数据时,正确拼接URL是必不可少的步骤。Python的urllib.parse模块提供了urljoin函数,用于自动完成URL的拼接。

使用urljoin

from urllib.parse import urljoinbase_url = "https://example.com"
relative_url = "/path/to/resource"
full_url = urljoin(base_url, relative_url)

urljoin能够智能处理绝对路径和相对路径,返回正确的完整URL。

4. 异常处理

网络请求和数据解析过程中可能会遇到各种异常,合理的异常处理能够提高爬虫的健壮性。

添加异常处理

try:response = session.get("目标URL")response.raise_for_status()  # 检查响应状态码
except requests.RequestException as e:print(e)

5. 实战案例:抓取《红楼梦》全文

以“诗词名句网”上的《红楼梦》为例,演示如何综合运用上述技术抓取全文。

import requests
from lxml import etree
from urllib.parse import urljoinsession = requests.Session()
main_url = "https://www.shicimingju.com/book/hongloumeng.html"
response = session.get(main_url)
response.encoding = response.apparent_encoding
tree = etree.HTML(response.text)
hrefs = tree.xpath("//div[@class='book-mulu']/ul/li/a/@href")for href in hrefs:detail_url = urljoin(main_url, href)detail_resp = session.get(detail_url)detail_resp.encoding = detail_resp.apparent_encodingdetail_tree = etree.HTML(detail_resp.text)content = detail_tree.xpath("//div[@class='chapter_content']//text()")content = "".join(content).strip().replace(" ", "")# 保存内容到文件

通过上述步骤,我们能够高效地抓取并处理网站数据。构建爬虫时,应注重编码处理、数据解析和URL拼接等关键技术,同时合理使用异常处理来提高爬虫的健壮性和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt 构建、执行qmake、运行、重新构建、清除

qt右键功能有 构建、执行qmake、运行、重新构建、清除,下面简单介绍一下各个模块的作用。 1. 执行qmake qmake是一个工具, 它根据pro文件生成makefile文件,而makefile文件中则定义编译与连接的规则。pro文件中定义了头文件,源文件…

C语言_通讯录_进阶

引言:在之前的项目中,我们所用的通讯录是静态版本,也就是常规的固定数组大小,但仔细思考,在现实的复杂环境中,是很难做到这样死板,所以在学习过动态内存的章节后,我们将通讯录重新修…

Spring Cache Caffeine 高性能缓存库

​ Caffeine 背景 Caffeine是一个高性能的Java缓存库,它基于Guava Cache进行了增强,提供了更加出色的缓存体验。Caffeine的主要特点包括: 高性能:Caffeine使用了Java 8最新的StampedLock乐观锁技术,极大地提高了缓存…

三国杀钓鱼自动化

三国杀钓鱼脚本 前言 本来是想做必杀的,但是后来测试了大约400钓发现纯靠连点没有漏掉的鱼,所以必杀功能就舍弃了。 我pyinstaller打包后运行.exe居然黑屏了???可能是多进程报错处理没写好,反正还是用vsc…

笔试第五行

static作用: 1.函数体内,一个被声明为静态的变量在这一函数被调用时值维持不变。 2.函数体外,模块内,一个被声明为静态的变量可以被模块内函数访问,但不能模块外函数访问,这是一个本地的全局变量。 3.模…

k8s部署使用有状态服务statefulset部署eureka集群,需登录认证

一、构建eureka集群镜像 1、编写dockerfile文件,此处基础镜像为arm版本,eureka目录中文件内容:application-dev.yml、Dockerfile、eureka-server-1.0-SNAPSHOT.jar(添加登录认证模块,文章最后附上下载连接) FROM mdsol/java8-j…

Go使用exec.Command() 执行脚本时出现:file or directory not found

使用 Go 提供的 exec.Command() 执行脚本时出现了未找到脚本的 bug,三个排查思路 : exec.Command(execName, args…) 脚本名字不允许相对路径 exec.Command(execName, args…) execName 只能有脚本名,不允许出现参数 如果你是使用 Windows …

为什么要使用网络IO内存数据库?

1.摘要 学习Redis的时候,我有个疑问:Redis缓存是内存数据库,但是它部署在独立的一个服务器上,那么应用服务器访问redis不是要通过网络吗,那么是不是还不如从本地服务器读取数据库的效率 ?结论是&#xff1a…

Ubuntu github 网速慢 打不开

1.在ipaddress 网站查找一下github的dns 并复制到/etc/hosts https://www.ipaddress.com/website/github.com/ 140.82.113.4 github.com 185.199.108.133 raw.githubusercontent.com #185.199.109.133 raw.githubusercontent.com #185.199.110.133 raw.githubusercontent.com …

[图像处理] 基于CleanVision库清洗图像数据集

CleanVision是一个开源的Python库,旨在帮助用户自动检测图像数据集中可能影响机器学习项目的常见问题。该库被设计为计算机视觉项目的初步工具,以便在应用机器学习之前发现并解决数据集中的问题。CleanVision的核心功能包括检测完全重复、近似重复、模糊…

ML 系列:机器学习和深度学习的深层次总结(17)从样本空间到概率规则概率

一、说明 概率是支撑大部分统计分析的基本概念。从本质上讲,概率提供了一个框架,用于量化不确定性并对未来事件做出明智的预测。无论您是在掷骰子、预测天气还是评估金融市场的风险,概率都是帮助您驾驭不确定性的工具。本篇将讲授概率的原理和…

论文阅读:Guided Linear Upsampling

今天介绍一篇有趣的文章,Guided Linear Upsampling,基于引导的线性上采样,这是发表在 ACM transaction on Graphic 的一篇工作。 Abstract 引导上采样是加速高分辨率图像处理的一种有效方法。在本文中,文章作者提出了一种简单而…

博客搭建之路:hexo搜索引擎收录

文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到,想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…

问:MySQL表过大,你有哪些优化实践?

当MySQL单表记录数过大时,数据库的CRUD(创建、读取、更新、删除)性能会明显下降。为了提升性能,我们需要采取一些优化措施。本文将详细介绍几种常见的优化方案。 1. 限定数据的范围 描述 务必禁止不带任何限制数据范围条件的查…

优先算法——移动零(双指针)

目录 1. 题目解析 2. 算法原理 3.代码实现 题目: 力扣题目链接:移动零 1. 题目解析 题目截图如下: 不过要注意,这个移动题目要求是在原数组中原地操作,不能新额外开辟一个数组来修改。 2. 算法原理 这个原理可以称之为数…

node和npm

背景(js) 1、为什么js能操作DOM和BOM? 原因:每个浏览器都内置了DOM、BOM这样的API函数 2、浏览器中的js运行环境? v8引擎:负责解析和执行js代码 内置API:由运行环境提供的特殊接口,只能在所…

Python | Leetcode Python题解之第507题完美数

题目&#xff1a; 题解&#xff1a; class Solution:def checkPerfectNumber(self, num: int) -> bool:if num 1:return Falsesum 1d 2while d * d < num:if num % d 0:sum dif d * d < num:sum num / dd 1return sum num

使用预训练的BERT进行金融领域问答

获取更多完整项目代码数据集&#xff0c;点此加入免费社区群 &#xff1a; 首页-置顶必看 1. 项目简介 本项目旨在开发并优化一个基于预训练BERT模型的问答系统&#xff0c;专注于金融领域的应用。随着金融市场信息复杂性和规模的增加&#xff0c;传统的信息检索方法难以高效…

Python 爬虫项目实战:爬取某云热歌榜歌曲

一、网络爬虫的定义 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;也成为网页蜘蛛或者网页机器人&#xff0c;是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索以及内容抓取等。 二、爬虫基本原理 1、种子URL&#xff1a;爬…

01 springboot-整合日志(logback-config.xml)

logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件&#xff0c;通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项&#xff0c;可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建&#xff0…