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

news/2024/2/28 16:29:07

这里先说一下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.ppmy.cn/news/1350030.html

相关文章

跟着cherno手搓游戏引擎【24】开启2D引擎前的项目总结(包括前置知识汇总)

前置技术&#xff1a; vs属性解释&#xff1a; MSBuild的入门完整教程&#xff08;包学包会&#xff09;-CSDN博客 配置界面&#xff1a; c动态链接和静态链接&#xff1a; 隐藏的细节&#xff1a;编译与链接_哔哩哔哩_bilibili 【底层】动态链接库(dll)是如何工作的&…

基于微信小程序的在线课堂的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

FTP服务简介(工作原理、连接模式、流行服务器软件)

FTP&#xff08;File Transfer Protocol&#xff0c;文件传输服务&#xff09;提供在Internet上的任意两台计算机之间相互进行的文件传输。只要双方主机都支持FTP协议&#xff0c;就可以利用FTP来进行文件传输。 工作原理 FTP服务是客户/服务器模式&#xff0c;用户通过客户机…

[C#] 如何使用ScottPlot.WPF在WPF桌面程序中绘制图表

什么是ScottPlot.WPF&#xff1f; ScottPlot.WPF 是一个开源的数据可视化库&#xff0c;用于在 WPF 应用程序中创建高品质的绘图和图表。它是基于 ScottPlot 库的 WPF 版本&#xff0c;提供了简单易用的 API&#xff0c;使开发人员能够通过简单的代码创建各种类型的图表&#…

第三百一十五回

文章目录 1. 概念介绍2. 基本用法3. 补充用法4. 内容总结 我们在上一章回中介绍了"再谈ListView中的分隔线"&#xff0c;本章回中将介绍showMenu的用法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容…

【设计模式】23中设计模式笔记

设计模式分类 模板方法模式 核心就是设计一个部分抽象类。 这个类具有少量具体的方法&#xff0c;和大量抽象的方法&#xff0c;具体的方法是为外界提供服务的点&#xff0c;具体方法中定义了抽象方法的执行序列 装饰器模式 现在有一个对象A&#xff0c;希望A的a方法被修饰 …

MySQL-----DCL基础操作

▶ DCL简介 DCL英文全称是Data ControlLanguage(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 DCL--管理用户 ▶ 查询用户 use mysql; select * from user; ▶ 创建用户 ▶ 语法 create user 用户名主机名 identified by 密码 设置为在任意主机上访问…

[自然语言处理|NLP] 文本分类与情感分析,数据预处理流程,包括了同义词替换和拼写纠正,以及使用NLTK库和TextBlob库进行标记化和情感分析(附代码)

[自然语言处理|NLP] 文本分类与情感分析,数据预处理流程,包括了同义词替换和拼写纠正,以及使用NLTK库和TextBlob库进行标记化和情感分析(附代码)。 自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,涉及了处理和理解人类语言的技术…

快速手动完成 VS 编写脚本自动化:如何选取最高效的工作方式?

那些不懂技术的朋友们可能会觉得&#xff0c;写代码写脚本不就是敲敲键盘嘛&#xff0c;搞那么高科技做什么&#xff0c;直接手工点点鼠标不就完事了。 这种看法很常见&#xff0c;但实际情况要复杂得多。 首先&#xff0c;手工操作虽然对于短期和小规模的任务来说似乎更快&am…

springboot177健身房管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

wireshark抓包问题及学习

wireshark抓包问题及学习 【场景1】服务A请求服务B经常超过3s&#xff0c;报错i/o timeout&#xff0c;想看下是否网络波动或者负载太高。需要抓包分析。 问题1&#xff1a; 超时时间不定&#xff0c;且请求量过大&#xff0c;一直抓了存文件里抓包文件过大。 解决学习&…

STM32 适合人群

STM32 适合各种需要进行嵌入式系统开发的人群&#xff0c;具体如下&#xff1a; 嵌入式系统工程师&#xff1a;嵌入式系统工程师可以使用 STM32 进行系统设计、硬件和软件编程、测试和部署等工作。学生和研究人员&#xff1a;学生和研究人员可以使用 STM32 进行实验、学习和研…

线性代数的本质——1 向量

向量是线性代数中最为基础的概念。 何为向量&#xff1f; 从物理上看&#xff0c; 向量就是既有大小又有方向的量&#xff0c;只要这两者一定&#xff0c;就可以在空间中随便移动。 从计算机应用的角度看&#xff0c;向量和列表很接近&#xff0c;可以用来描述某对象的几个不同…

利用Python和pandas库进行股票技术分析:移动平均线和MACD指标

利用Python和pandas库进行股票技术分析&#xff1a;移动平均线和MACD指标 介绍准备工作数据准备计算移动平均线计算MACD指标结果展示完整代码演示 介绍 在股票市场中&#xff0c;技术分析是一种常用的方法&#xff0c;它通过对股票价格和交易量等历史数据的分析&#xff0c;来…

备战蓝桥杯---组合数学基础1

让我们来几道高中的组合题吧&#xff1a; 1.我们一定有n个向下&#xff0c;为 2.我们挑最大的两个&#xff0c;条件是他们奇偶性相同&#xff0c;为2*A10,2; 3.用捆绑法即可。 4.我们用隔板法&#xff0c;为 5.问题等价于23个相同的球放到3个盒子里&#xff0c;每个盒子至少…

golang设置

golangci-lint 代码检查工具的集合&#xff0c;聚集了多种 Go 代码检查工具&#xff0c;如 golint 会自动查找项目中的 .golangci.yml 配置文件 会检查代码中潜在常见问题以及代码风格问题 # 文档&#xff1a;https://golangci-lint.run/ # https://github.com/golangci/golang…

[2024]常用的pip指令

[2024]常用的pip指令 HI&#xff0c;这里是肆十二&#xff0c;好久不见&#xff0c;大家&#xff01; 新年好&#xff01; pip是Python的包管理工具&#xff0c;它可以用来安装、升级、卸载Python包。以下是一些常用的pip指令&#xff1a; 安装包&#xff1a; bash复制代码…

【Python】洛谷P4325 [COCI2006-2007#1] Modulo

P4325 [COCI2006-2007#1] Modulo 题面翻译 给出 10 10 10 个整数&#xff0c;问这些整数除以 42 42 42 后得到的余数有多少种。 第一个样例的十个结果是 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10&#xff0c;有 10 10 10 个不…

Vscode SSH使用云服务器访问内网主机

Vscode SSH使用云服务器访问内网主机 云服务器在配置策略中开放使用到的端口号&#xff0c;比如250和251作为使用。 首先在内网主机上使用ssh-copy-id root云服务器公网IP&#xff0c;将内网主机的公钥放到服务器上 这一步必须完成&#xff0c;不然下面的命令无法成功建立隧…

精读《js 模块化发展》

1 引言 如今&#xff0c;Javascript 模块化规范非常方便、自然&#xff0c;但这个新规范仅执行了 2 年&#xff0c;就在 4 年前&#xff0c;js 的模块化还停留在运行时支持&#xff0c;10 年前&#xff0c;通过后端模版定义、注释定义模块依赖。对经历过来的人来说&#xff0c;…
最新文章