今日内容概要

  • bs模块之标签查找
  • 过滤器
  • selenium模块

今日内容详细

html_doc = """
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<p id="my p" class="title">
<b id="bbb" class="boldest">The Dormouse's story</b>
</p> <p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p> <p class="story">...</p>
"""
from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc,'lxml')
#2、获取标签的名称
# print(soup.p.name)
#3、获取标签的属性
# print(soup.p.attrs)
#4、获取标签的内容
# print(soup.p.text)
#5、嵌套选择
# print(soup.head.title.string) # 依次往内部查找
# print(soup.body.a.string)
#6、子节点、子孙节点
# print(soup.p.contents) #p下所有子节点
# print(soup.p.children) #得到一个迭代器,包含p下所有的子节点
# for child in soup.p.children:
# print(child)
#7、父节点、祖先节点
# print(soup.a.parent) #获取a标签的父节点
# print(soup.a.parents) #找到a标签所有的祖先节点,父亲的父亲,父亲的父亲的父亲……
# for p in soup.a.parents
# print(p)
#8、兄弟节点
# print('=====>')
# print(soup.a.next_siblings) #下一个兄弟
# for i in soup.a.next_siblings:
# print(i)
# print(soup.a.previons_sibling) #上一个兄弟
# print(list(soup.a.next_siblings)) #下面的兄弟们=>生成器对象
# print(soup.a.previous_siblings) #上面的兄弟们=>生成器对象
"""
儿子:在一个标签内部的第一层级标签
<span>相对于下面同级别的div就是哥哥</span>
<div>
<div>相对于外层的div就是儿子
<p>上一层div的儿子上上一层div的孙子</p>
</div>
<p>相对于外层的div就是儿子</p>
</div>
<span>相对上面同级别的div就是弟弟</span>
后代
兄弟
弟弟
哥哥
"""

过滤器

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_doc,'lxml')
#1、五种过滤器:字符串、正则表达式、列表、True、方法
#1.1、字符串:即标签名 结果是一个列表 里面的元素才是真正的标签对象
# print(soup.find_all('b')) # [<b> class="boldest" id="bbb">The Dormouse's story</b'] #1.2、正则表达式
# import re # 一定要注意拿到的结果到底是什么数据类型
# print(soup.find_all(re.compile('^b'))) # 找出b开头的标签,结果有body和b标签 #1.3、列表:如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回。下面代码找到文档中所有<a>标签和<b>标签:
# print(soup.find_all(['a','b'])) # 找到文档中所有<a>标签和<b>标签 #1.4、True:可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点
# print(soup.find_all(True)) # True表示所有
# for tag in soup.find_all(True):
# print(tag.name) #1.5、方法:如狗哦没有合适的过滤器,那么还可以定义一个方法,方法只接受一个元素参数,如果这个方法返回 True 表示当前元素匹配并且被找到,如果不是返回 False
# def has_class_but_no_id(tag):
# return tag.has_attr('class') and not tag.has_attr('id')
#
# print(soup.find_all(has_class_but_no_id))

中文文档

https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#find-parents-find-parent

selenium模块

嫩够帮你自动操作浏览器
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器 1.需要下载模块
pip3 install -i
2.还需要下载一个控制浏览器的驱动
http://npm.taobao.org/mirrors/chromedriver/2.38/
# 注意下载的驱动一定呀跟你浏览器的版本匹配 不能无法操作
如何查看当前浏览器版本
3.下载好的驱动文件有两个存放的位置
1.直接放在你项目的目录下
2.放到Python安装路径的scripts目录中即可
from selenium import webdriver
import time
bro=webdriver.Chrome() # 生成谷歌浏览器的驱动对象
bro.get("http://www.baidu.com") # 自动打开谷歌浏览器访问百度首页
bro.implicitly_wait(10) # 设置一个等待时间 超出范围还没加载出来就放弃
# 1、find_element_by_id 根据id找
# 2、find_element_by_link_text 根据链接名字找到控件(a标签的文字)
# 3、find_element_by_partial_link_text 根据链接名字找到控件(a标签的文字)模糊查询
# 4、find_element_by_tag_name 根据标签名
# 5、find_element_by_class_name 根据类名
# 6、find_element_by_name 根据属性名
# 7、find_element_by_css_selector 根据css选择器
aEle = bro.find_element_by_link_text('登录')
# 点击a标签
aEle.click()
# 通过id获取p标签
pEle = bro.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn')
# 点击p标签
pEle.click()
# 通过id找获取用户用户名的input框
UserEle = bro.find_element_by_id('TANGRAM__PSP_11__userName')
# 点击UserEle
UserEle.click()
# 输入用户名
UserEle.send_keys('18856211855')
time.sleep(1)
# 通过id找获取用户密码的input框
PwdEle = bro.find_element_by_id('TANGRAM__PSP_11__password')
# 点击UserEle
PwdEle.click()
# 输入用户名
PwdEle.send_keys('xxxxxx')
time.sleep(1)
SubEle = bro.find_element_by_id('TANGRAM__PSP_11__submit')
SubEle.click()
print(bro.get_cookies()) # 直接组织成字典里面有所有的键值对
print(bro.get_cookie()) # Get a single cookie by name bro.close()

等待元素加载完毕

"""
有些页面的标签元素并不是直接写在html文件上的而是通过后续
js代码动态加载出来的 所以需要在查找标签的时候设置一个等待时间
"""
# 隐式等待:在查找所有元素时,如果尚未被加载,则等10秒(推荐使用)
# browser.implicitly_wait(10) 表示等待所有, # 显式等待:显式地等待某个元素被加载(不推荐使用)
# wait=WebDriverWait(browser,10)
# wait.until(EC.presence_of_element_located((By.ID,'content_left')))

爬虫之标签查找补充及selenium模块的安装及使用与案例的更多相关文章

  1. 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求 selenium模块 selenium模块为 ...

  2. 第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

    第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 ...

  3. Selenium模块的安装

    Selenium模块 1.安装selenium python2:pip install selenium python3:pip install selenium 2.设置浏览器驱动 解压后必须与浏览 ...

  4. python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)

    一.Selenium 简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全 ...

  5. 二十九 Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    selenium模块 selenium模块为第三方模块需要安装,selenium模块是一个操作各种浏览器对应软件的api接口模块 selenium模块是一个操作各种浏览器对应软件的api接口模块,所以 ...

  6. 十六 web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

    PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,利用这个软件,可以获取到网址js加载的任何信息,也就是可以获取浏览器异步加载的 ...

  7. python selenium 模块的安装及使用

    安装 pip install selenium 或者到https://pypi.python.org/pypi/selenium 下载setup安装包,之后进入目录后运行python setup.py ...

  8. 网络爬虫(一):配置selenium、pycharm(windows平台)

    最近在学习爬虫的编写,使用selenium模块时候,遇到了很多坑,本blog的目的是总结一下遇到的坑和解决办法,以便后来人少走弯路! 以下介绍均以Python3.x为基准进行,基于windows平台的 ...

  9. selenium模块跳过用户名密码验证码输入,加载浏览器标签和cookie,进行翻页爬虫多页动态加载的数据(js)

    能解决登陆一次后,之后不需要二次登陆的动态加载数据,网页保存的cookie和标签,加入到selenium自动化测试浏览器中 1 from selenium import webdriver 2 imp ...

随机推荐

  1. 带你十天轻松搞定 Go 微服务系列(五)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务(本文) 支付服务 RPC 服务 Auth ...

  2. numpy 矩阵在作为函数参数传递时的奇怪点

    numpy 矩阵在作为函数参数传递时的奇怪点 import numpy as np class simpleNet: def __init__(self): self.W = np.array([1, ...

  3. docker k8s安装

    docker安装 删除依赖包 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docke ...

  4. java中的线程是如何工作的。

    来自对此文章的编辑. https://mp.weixin.qq.com/s?biz=MzA5NDg3MjAwMQ==&mid=2457103451&idx=1&sn=ba302 ...

  5. Flutter 2.10 更新详解

    Flutter 2.10 版已正式发布!虽然⾃ 上次稳定版本发布 以来还不到两个⽉,即使在这么短的时间内,我们也已处理和关闭了 1843 个 Issue,合并了来⾃全球 155 位贡献者的 1525 ...

  6. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2021.7

    公告 ApacheCN 翻译预计将于半年内恢复. 我们的开源项目必须有中文的 README,如果是文档类项目,必须全部中文,否则将会被清理.请大家贡献项目时一定要留意. 我们目标是[财务自由+情感自由 ...

  7. 趁着同事玩游戏偷偷认识k8s一家子补补课

    趁着同事玩偷偷认识k8s一家子补补课 Kubernetes集群这个大家庭在容器化时代能够新军崛起,要感谢其众多可靠稳定,工作认真负责的优质成员. 这些兄弟姐妹们为集群提供故障转移和高可用性,保证k8s ...

  8. 前后端数据json交换的问题

    问题1:前端发送给后端数据了,后端也接收到了,后端同时返回数据给前端了,但是前端的ajax请求中的success(data){}中的方法不执行 解决:排查了很多问题,结果都一一排除了,最后发现后端发送 ...

  9. JFrame实现圆角窗体

    感谢大佬:https://blog.csdn.net/Mr_Pang/article/details/47808299?utm_source=blogxgwz0 注:使用AWTUtilities类跨平 ...

  10. .NET 6全文检索引擎Lucene.NET 4.8简单封装

    前言 因为最近在做一个检索数据的工具.最开始用的Mysql8自带的全文检索功能.但是发现这货数据量超过百万之后,检索速度直线下降. 于是想到Lucene.net.花了一晚上时间做了简单的封装.可以直接 ...