CSS Selector—选择方法,和html自动——异步社区的爬取(动态网页)——爬虫(get和post的区别)

news/发布时间2024/6/7 18:08:55

这里先说一下GET请求和POST请求:
post我们平时是要加data的也就是信息,你会发现我们平时百度之类的 搜索都是post请求

get我们带的是params,是发送我们指定的内容。

要注意是get和post请求!!!

先说一下异步社区的爬取吧!!!

import ast
import json
import os
import requests
import reimg_path = "异步社区免费书名"
img_path = f"./{img_path}/"  # 指定保存地址
if not os.path.exists(img_path):print("您没有这个文件为您新建一个文件---")os.mkdir(img_path)
else:print(f"为您保存在{img_path}文件夹中")url = 'https://www.epubit.com/pubcloud/operation/front/portal/getData?'hearder = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0','Cookie':'acw_tc=2760778817075767822875772e9bcf3ab5beae1aa1ebb67787560accfa3087'
}
for i in range(1,4,1):params = {'policyId': '97a5bcb8-54c2-4649-ac37-72a11b0490dc','floorCode': 'A1','more': 'true','page': f'{i}','row': '10'}response = requests.get(url,headers=hearder,params=params).text#print(response)dic = json.loads(response)# print(dic)# print(type(dic))dic2 = dic['data']dic3 = dic2['records']for i in range(0,len(dic3),1):content = dic3[i]['name']print(content)#print(type(dic3[i]))f = open(f"{img_path}name.txt", 'a')content = content+'\n'f.write(content)

 这个方法是用我以前用的动态网页爬取的爬的。还在尝试用selenium爬取(没有成功)!

这是没有加params你会发现,找不到我们想要找的。这个是个动态网页的抓取。

然后加上上面代码中的params,就可以进入了。

1.dic = json.loads(response)

                这个就是把json形式转为字典,json的形式就是,代大括号像字典的。

2.

dic2 = dic['data']
dic3 = dic2['records']

这个就是找找找!!!

3.for i in range(0,len(dic3),1):content = dic3[i]['name']print(content)#print(type(dic3[i]))f = open(f"{img_path}name.txt", 'a')content = content+'\n'f.write(content)

这个就是写入文件

结束!!!,还想尝试selenium但是没成功!


下来进入重点!!!

先说自动化,这个就是基本形式

from selenium import webdriver
from selenium.webdriver.common.by import By# 创建 WebDriver 对象
wd = webdriver.Chrome()# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.byhy.net/_files/stock1.html')# 根据id选择元素,返回的就是该元素对应的WebElement对象
element = wd.find_element(By.ID, 'kw')# 通过该 WebElement对象,就可以对页面元素进行操作了
# 比如输入字符串到 这个 输入框里
element.send_keys('通讯\n')

1.web自动化:选择元素:

element = wd.find_element(By.ID, 'kw') 

这个就是选择ID为kw的内容。ID这里可以变为CLASS_NAME

elements = wd.find_elements(By.TAG_NAME, 'div')

这个是找标签!

2.wd.click()这个是点击!wd.quit()这个关闭网页!!

3.为防止我们平时爬取太慢而没有爬到——wd.implicitly_wait(10)

这个就是没有爬到等待,最多等到10s

4.这个也是获取class的内容

element.get_attribute('class')

获取HTML

element.get_attribute('innerHTML')

获取输入框内容

element.get_attribute('value')


下面是css表达式:这个就比较高效了

如果我们要选择的 元素 没有id、class 属性,或者有些我们不想选择的元素 也有相同的 id、class属性值,怎么办呢?

这时候我们通常可以通过 CSS selector 语法选择元素。


css格式 :——class——‘.’

                  ——id——‘#’

                  ——标签——“什么都不要”

                ——href——“[href="网址"]”


这个是搜索格式: 

        find_element(By.CSS_SELECTOR, CSS Selector参数)


<div class="misc" ctype="gun">沙漠之鹰</div>

CSS 选择器 可以指定 选择的元素要 同时具有多个属性的限制,像这样

 div[class=misc][ctype=gun]


子和后代元素的选择 :

子元素 ‘>’

后代元素‘空格’


1.div.footer1 > span.copyright

这个的意思是 div标签的class类中的叫footer1的子元素span标签的class类的叫copyright

2..footer1 .copyright

这个意思是class类叫footer1的后代叫copyright的

3..plant , .animal

这个意思是class类叫plant和叫animal的选择

这个是格式:

elements = wd.find_elements(By.CSS_SELECTOR, '.plant , .animal')


节点:

我们可以指定选择的元素 是父元素的第几个子节点

使用 nth-child

1.span:nth-child(2)

这个意思是父元素的第二个子元素,类型为span

2.p:nth-last-child(1)

这个意思是 倒数

3.nth-of-type

这个意思是只看这个所选的类型

4.span:nth-of-type(1)

这个意思是第一个span类型的子元素

5.nth-last-of-type

这个是 倒数

6.nth-child(even)——偶数节点,nth-child(odd)——奇数节点

如果要选择的是父元素的 某类型偶数节点,使用 nth-of-type(even)

如果要选择的是父元素的 某类型奇数节点,使用 nth-of-type(odd)

7.h3 + span

标签为h3后面紧跟的span

8.h3 ~ span

标签为h3后面的所有span节点


css注意“空格”不能乱加,这个是根据白月黑雨写的这个爆赞!!!

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

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

相关文章

AJAX——URL查询参数

1 URL查询参数 定义&#xff1a;浏览器提供给服务器的额外信息&#xff0c;让服务器返回浏览器想要的数据 语法&#xff1a;http://xxxx.com/xxx/xxx?参数名1值1 & 参数名2值2 2 axios-查询参数 语法&#xff1a;使用axios提供的 params 选项 注意&#xff1a;axios在…

【PyQt】在PyQt5的界面上集成matplotlib绘制的图像

文章目录 0 前期教程1 概述2 matplotlib2.1 库导入2.2 图片的各个部分解释2.3 代码风格2.4 后端 3 集成matplotlib图像到pyqt界面中3.1 使用到的模块3.2 理解Qt Designer中的“控件提升”3.3 界面与逻辑分离的思路3.4 扩展 0 前期教程 【PyQt】PyQt5进阶——串口上位机及实时数…

云计算基础-快照与克隆

快照及克隆 什么是快照 快照是数据存储的某一时刻的状态记录&#xff0c;也就是把虚拟机当前的状态保存下来(快照不是备份&#xff0c;快照保存的是状态&#xff0c;备份保存的是副本) 快照优点 速度快&#xff0c;占用空间小 快照工作原理 在了解快照原理前&#xff0c;…

【ARM架构】ARMv8-A 系统中的安全架构概述

一个安全或可信的操作系统保护着系统中敏感的信息&#xff0c;例如&#xff0c;可以保护用户存储的密码&#xff0c;信用卡等认证信息免受攻击。 安全由以下原则定义&#xff1a; 保密性&#xff1a;保护设备上的敏感信息&#xff0c;防止未经授权的访问。有以下几种方法可以做…

电路设计(20)——数字电子钟的multism仿真

1.设计要求 使用数字芯片&#xff0c;设计一个电子钟&#xff0c;用数码管显示&#xff0c;可以显示星期&#xff0c;时、分、秒&#xff0c;可以有按键校准时间。有整点报警功能。 2.设计电路 设计好的multism电路图如下所示 3.芯片介绍 时基脉冲使用555芯片产生。在仿真里面…

【Java多线程】线程中几个常见的属性以及状态

目录 Thread的几个常见属性 1、Id 2、Name名称 3、State状态 4、Priority优先级 5、Daemon后台线程 6、Alive存活 Thread的几个常见属性 1、Id ID 是线程的唯一标识&#xff0c;由系统自动分配&#xff0c;不同线程不会重复。 2、Name名称 用户定义的名称。该名称在各种…

年前花2个月面过阿里测开岗,拿个27K也不过分吧?

背景介绍 美本计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实…

找负环(图论基础)

文章目录 负环spfa找负环方法一方法二实际效果 负环 环内路径上的权值和为负。 spfa找负环 两种基本的方法 统计每一个点的入队次数&#xff0c;如果一个点入队了n次&#xff0c;则说明存在负环统计当前每个点中的最短路中所包含的边数&#xff0c;如果当前某个点的最短路所…

sheng的学习笔记-网络爬虫scrapy框架

基础知识&#xff1a; scrapy介绍 何为框架&#xff0c;就相当于一个封装了很多功能的结构体&#xff0c;它帮我们把主要的结构给搭建好了&#xff0c;我们只需往骨架里添加内容就行。scrapy框架是一个为了爬取网站数据&#xff0c;提取数据的框架&#xff0c;我们熟知爬虫总…

0206-1-网络层

第 4 章 网络层 网络层提供的两种服务 虚电路服务 数据报服务 概要: 虚电路服务与数据报服务的对比 网际协议 IP 网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。与 IP 协议配套使用的还有四个协议&#xff1a; 地址解析协议 ARP (Address Resolution Protocol)逆地…

OpenAI超级视频模型Sora技术报告解读,虚拟世界涌现了

昨天白天&#xff0c;「现实不存在了」开始全网刷屏。 「我们这么快就步入下一个时代了&#xff1f;Sora简直太炸裂了」。 「这就是电影制作的未来」&#xff01; 谷歌的Gemini Pro 1.5还没出几个小时的风头&#xff0c;天一亮&#xff0c;全世界的聚光灯就集中在了OpenAI的So…

如何根据需求理解CPU、SoC和MCU的区别

在当今数字化的世界中&#xff0c;我们经常听到关于CPU、SoC和MCU的名词&#xff0c;它们都是计算机科学和电子工程领域中的重要组成部分。然而&#xff0c;这三者之间存在着明显的区别。本文将深入探讨CPU&#xff08;中央处理器&#xff09;、SoC&#xff08;系统芯片&#x…

数据库MySQL中出现乱码和表格不对齐怎么解决

MySQL中出现乱码问题及解决办法&#xff1a; 情况类似&#xff1a; 首先进入到数据库中&#xff0c;命令&#xff1a;mysql -h localhost -uroot -p或者mysql -uroot -p;进入数据库后选择一个你的数据库查看表中的中文是否乱码 以上是数据库中表格出现乱码情况&#xff0c;原…

第80讲订单管理功能实现

后端 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.java1234.mapper.OrderM…

Spring Native 解放 JVM

一、Spring Native 是什么 Spring Native可以通过GraalVM将Spring应用程序编译成原生镜像&#xff0c;提供了一种新的方式来部署Spring应用。与Java虚拟机相比&#xff0c;原生镜像可以在许多场景下降低工作负载&#xff0c;包括微服务&#xff0c;函数式服务&#xff0c;非常…

计算机网络之一

目录 1.因特网概述 1.1网络、互连网&#xff08;互联网&#xff09;和因特网 1.2.因特网发展的三个阶段 1.3基于ISP的三层架构的因特网 1.4.因特网的组成 2.三种交换方式 2.1电路交换 2.2分组交换 1.因特网概述 1.1网络、互连网&#xff08;互联网&#xff09;和因特网…

apk反编译修改教程系列---简单修改apk默认横竖屏显示 手机端与电脑端同步演示【十一】

往期教程&#xff1a; apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】 apk反编译修改教程系列---简单…

初始树莓派 + VMware17 安装树莓派(Raspberry Pi 4B/5)

文章目录 树莓派入门 VMware17 安装树莓派(Raspberry Pi 4/5B)前言一、树莓派入门指南&#xff1a;从零开始探索树莓派树莓派4B和5对比 二、在VMware Workstation 17上安装树莓派4B/5操作系统&#xff1a;实现强大性能与便捷模拟工具准备开始安装树莓派1.创建一个虚拟机2. 选择…

Android MMKV 接入+ 替换原生 SP + 原生 SP 数据迁移

背景:项目中一直使用的是原生 SP,众所周知,使用原生 SP 存在卡顿性能问题。公司的性能监控平台抓到不少原生 SP 导致的 ANR 问题: java.io.FileDescriptor.sync (FileDescriptor.java) android.os.FileUtils.sync (FileUtils.java:256) android.app.SharedPreferencesImpl.…

ClickHouse--06--其他扩展MergeTree系列表引擎

其他扩展MergeTree系列 MergeTree 系列表引擎 --种类 MergeTree 系 列 表 引 擎 包 含 &#xff1a; MergeTreeReplacingMergeTreeSummingMergeTree&#xff08;汇总求和功能&#xff09;AggregatingMergeTree&#xff08;聚合功能&#xff09;CollapsingMergeTree&#xff08…
推荐文章