爬虫案例(读书网)(下)

上篇链接:

CSDN-读书网icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/139306808

可以看见基本的全部信息:如(author、bookname、link.....)

 写下代码如下:

import requests
from bs4 import BeautifulSoup
from lxml import etreeheaders={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'}
link="https://www.dushu.com/"
r=requests.get(link,headers=headers)
r.encoding='utf-8'soup=BeautifulSoup(r.text,'lxml')
house_list=soup.find_all('div',class_="border books-center")
html=etree.HTML(r.text)# name=html.xpath('//div[@class="property-content-title"]/h3/text()')
# for house in house_list:
#     name=soup.find('div',class_="nlist").a.strong.text()
#
#     print(name)
name=html.xpath('//div[@class="bookname"]/a/text()')
author=html.xpath('//div[@class="bookauthor"]/text()')
# href=html.xpath('//div[@class="nlist"]/div/ul/li/a/@href')#print(type(author))
for i,o in zip(name,author):print('<<'+i+'>>',o)

运行结果:

接下来添加link链接:

可以看见现在网站设置了反爬,我们现在通过检查浏览器能正常爬取还是有反爬:

# 请用 python+selenium  爬取 XXX 网站上的所有a链接的 href属性并访问,输出访问地址和状态码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requestsdriver = webdriver.Chrome()
# 这里以百度为例
driver.get("https://www.dushu.com/")wait = WebDriverWait(driver, 10)
links = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//a")))# 遍历所有的链接元素,并输出href属性值
for link in links:href = link.get_attribute("href")if href.startswith("http"):response = requests.get(href)print(href, response.status_code)else:link.click()print(driver.current_url, driver.execute_script('return document.readyState'),requests.get(driver.current_url).status_code)# 关闭浏览器
driver.quit()

 运行结果:

 

现在可以看出是反爬。

最后我们的解析反爬,在下一篇文章详细介绍几个方法和使用效果。 

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

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

相关文章

scottplot5 中 使用signalXY图,如何更新数据?

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

总部下达任务时,如何保证员工的执行力?

执行力是个体基于战略目标&#xff0c;有效整合利用资源&#xff0c;保质保量完成预定目标的操作能力&#xff0c;员工执行力的高低是企业完成效益、成果转化的关键。执行力包含完成任务的意愿、完成能力、完成程度三个维度&#xff0c;其中意愿是基础和出发点&#xff0c;能力…

物联网与通信技术

查了很多资料&#xff0c;也夹杂着一些自己的见解。此篇文章仅探讨三个问题&#xff1a;物联网与通信技术的关系&#xff1b;5G为物联网带来了什么&#xff0c;物联网真的需要5G吗&#xff1b;物联网发展的现实问题。 1、物联网与通信技术的关系 最近几年&#xff0c;物联网的…

Apache POI 使用Java处理Excel数据 进阶

1.POI入门教程链接 http://t.csdnimg.cn/Axn4Phttp://t.csdnimg.cn/Axn4P建议&#xff1a;从入门看起会更好理解POI对Excel数据的使用和处理 记得引入依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactI…

CentOS搭建 Mono 开发环境

Mono 是一个由 Xamarin 公司所主持的自由开放源代码项目,该项目的目标是创建一系列匹配ECMA标准的.NET工具,包括 C# 编译器和通用语言架构,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris,甚至一些游戏平台,本实验带您搭建 Mono …

Linux chmod 命令简介

在Linux中&#xff0c;chmod 命令用于改变文件或文件夹的访问权限。要改变一个文件夹及其内部所有文件和子文件夹的权限&#xff0c;您可以使用递归选项 -R。以下是一些常用的 chmod 命令示例&#xff1a; 给所有用户读、写和执行权限&#xff1a; chmod -R 777 /path/to/direc…

JVM高频面试点

文章目录 JVM内存模型程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池 Java对象对象的创建如何为对象分配内存 对象的内存布局对象头实例数据对齐填充 对象的访问定位 垃圾收集器找到垃圾引用计数法可达性分析&#xff08;根搜索法&#xff09; 引用概念的扩充回收方…

【Socket套接字编程】(实现TCP和UDP的通信)

&#x1f387;&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳&#xff0c;欢迎大佬指点&#xff01; 人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友…

java序列化与反系列化,serializable原理,Parcelable接口原理解析,Json,XML

Java的序列化和反序列化是用于对象的持久化和传输的重要机制。以下是对相关概念的详细解释&#xff1a; Java 序列化与反序列化 序列化 (Serialization) 是将 Java 对象转换为字节流的过程&#xff0c;这样对象就可以通过网络传输或者保存到文件中。反序列化 (Deserializatio…

创建通用JS公共模块并发布至npm

title: 创建通用JS公共模块并发布至npm tags: UMD rollup verdaccio npm categories: 模块化 概要内容 创建&#xff1a;JS公共模块 打包&#xff1a;使用rollup 打包公共模块 发布&#xff1a;js公共模块至verdaccio平台 发布&#xff1a;js公共模块至npm平台 如何创建JS公共模…

【PostgreSQL】Windows 上安装 PostgreSQL 16版本

博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

二叉树遍历(C++)

题目描述 树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序&#xff0c; 给定中序和其它一种 遍历的序列就可以确定一棵二叉树的结构。 假定一棵二叉树一个结点用一个字符描述&#xff0c;现在给出中序和按层遍历的字符串&#xff0c;求该树 的先序遍历字符串。 输…

【Python】TensorFlow介绍与实战

TensorFlow介绍与使用 1. 前言 在人工智能领域的快速发展中&#xff0c;深度学习框架的选择至关重要。TensorFlow 以其灵活性和强大的社区支持&#xff0c;成为了许多研究者和开发者的首选。本文将进一步扩展对 TensorFlow 的介绍&#xff0c;包括其优势、应用场景以及在最新…

基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-支持VForm3表单的选择与支持

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、初始化的时候加载表单 /** 查询表单列表 */ const getFormList () > {listForm().then(res > formOptions.value res.result.records) } 2、开始节点的修改&#xff0c;增加表…

计算机的错误计算(三十四)

摘要 用错数预测 &#xff08;或 pow(a,x)&#xff09;函数的结果中含有的错误数字的个数&#xff0c;并与Visual Studio 和Excel 的输出中含有的错误位数相比较。结果显示&#xff0c;预测与实际一致。 对于 &#xff08;或 pow(a,x)&#xff09;函数&#xff0c;根据 与 的不…

C# 静态变量与动态变量的区别及用法

在 C# 中&#xff0c;"静态变量"与"动态变量"并不是直接相关的概念&#xff0c;但可以根据您的问题提供一些解释。静态变量和动态变量通常与变量的生命周期和类型绑定相关。以下是两者的一些区别&#xff1a; 静态变量&#xff08;Static Variables&#…

3.RabbitMQ安装-Centos7

官方网址&#xff1a;gInstalling RabbitMQ | RabbitMQ 安装前提&#xff0c;需要一个erlang语言环境。 下载 erlang: Releases rabbitmq/erlang-rpm GitHub rabbitmq-server: 3.8.8 Releases rabbitmq/rabbitmq-server GitHub 安装命令 (说明i表示安装&#xff…

SCI一区级 | Matlab实现SSA-CNN-GRU-Multihead-Attention多变量时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现SSA-CNN-GRU-Multihead-Attention麻雀算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测&#xff0c;要求Matlab2023版以上&#xff1b; 2.输入多个特征&#xff0c;输出单个…

Python--MySQL及其使用

1. MySQL 简介 MySQL 是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛用于各种应用程序&#xff0c;支持多种操作系统。它使用 SQL 语言进行数据查询、管理和操作。 2. MySQL 的主要特点 跨平台&#xff1a;支持多种操作系统&#xff0c;如…

一文掌握Prometheus实现页面登录认证并集成grafana

一、接入方式 以保护Web站点的访问控制&#xff0c;如HTTP 服务器配置中实现安全的加密通信和身份验证&#xff0c;保护 Web 应用程序和用户数据的安全性。 1.1 加密密码 通过httpd-tools工具包来进行Web站点加密 yum install -y httpd-tools方式一&#xff1a;通过htpasswd生…