当前位置: 首页 > web >正文

python爬虫之获取渲染代码

 获取渲染后的网页代码

过get()方法获取浏览器中的网页资源后,浏览器将自动渲染网页源代码内容,并生成渲染后的的时使用page_source()方法即可获取渲染后的网页代码。
示例代码:


'''获取渲染后的网页代码'''
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.ptpress.com.cn/')
print(driver.page_source)

第7行代码使用driver对象中的pagesource()方法获取被get()方法获取到的渲染后的网页源代码。执行代码后的输出结果如图15-35所示,图中标注框处的内容即网页中的图片url。

小项目案例:实现批量下载网页中的资源

根据15.3.2小节中的返回网页内容可知,用户只有获取了网页中的图片ur1才可以将图片下载到本在使用selenium库渲染网页后,可直接通过正则表达式过滤出指定的网页图片,从而实现批量下载接下来以此为思路来实现一个小项目案例。
项目任务
实现批量下载人民邮电出版社官网中与Python相关的图书封面图片。项目实现步骤
步骤1,获取人民邮电出版社官网中与Python相关的图书封面图片ur1。“python”的图书封面图片url。使用get()方法即可获取疑

步骤2,使用selenium库驱动浏览器渲染网页,并获取渲染后的网页代码
步骤3,使用正则表达式过滤出图片的url。
步骤4,使用15.3.2小节的返回网页内容中的方法将对应ur1的图片下载到本地
项目实现代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
import re
chrome_options = Options()
chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.ptpress.com.cn/search?keyword=python')
a= re.findall('<img src="(.+?jpg)"></div>',driver.page_source)
i = 1
for url in a:r = requests.get(url)f2 = open('Python图书\\'+str(i)+'.jpg','wb')i += 1f2.write(r.content)f2.close()

第4~6行代码绑定了Chrome浏览器,并驱动浏览器
第7行代码使用get()方法打开Python类图书的网页,如图15-36所示。
第8行代码使用正则表达式过滤driver.page_source(渲染后的网页代码)中的图片url。如图15-36所示可以观察到所有图书封面图片的标签为<img>,图片格式为,jpg,且下一个标签为</div>。因此使用正则表达式设计的过滤规则为'<img src="(.+?jpg)"></div>’。过滤规则不是统一的,读者可以自行设计过滤规则。第9~15行代码使用requests库中的get()方法将过滤出来的ur1分别保存到相对路径“\Python图书”下。执行代码后将会自动下载网页中的图书封面图片到本地文件夹“\Python图书”中,如图15-37所示。

此项目案例介绍了一个通用的下载网页资源的方法,读者掌握此方法后即可实现批量下载大部分网站中的图片、音乐、视频等资源文件。

获取和操作网页元素

15.7.5小节获取标签中的图片url使用了正则表达式的方式进行过滤,而WebDriver对象中也提供了大量用于获取网页指定元素的方法(详见15.7.3小节中基础类WebDriver)。
·获取网页中的指定元素
在获取了网页中的某个元素后,可以使用以下方法对此元素进行相应操作。

text()方法:获取元素的文本内容。
click()方法:单击此元素。
submit()方法:提交表单。
send_keys()方法:模拟输入信息。
size()方法:获取元素的尺寸。跌类可进入selenium库文件夹下的webdriver\remote\webelement.py中查看更多的操作方法。下面。
演示send_keys()方法的实现过程。
。在元素中输入信息
send_keys()方法可以实现在元素中输入信息,例如在窗口标签中输入信息。其使用形式如下:

send keys(*value)

参数value:表示需要输入的字符串信息。
示例代码(在人民邮电出版社官网的搜索框中输入“Python”):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.ptpress.com.cn/')
driver.find_elements_by_tag_name("input")[1].send_keys("Python")

第8行代码使用find_element_by_tag_name()方法找到标签名为input的元素(通过网页源代码可知搏索框的标签名为input)。获取到标签后使用send_keys()方法实现在搜索框内输入字符串"Python"。代码执行结束后的网页效果如图15-38所示。

获取元素的方法比较多,读者可按照不同的方法灵活实现。实现在搜索框中输入信息的代码程序后,还可以模拟用户的按键操作,其使用方法为在字符串后面继续增加按键转义字符串信息。
示例代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
chrome_options = Options()
chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.ptpress.com.cn/')
driver.find_elements_by_tag_name("input")[1].send_keys("Python"+ Keys.RETURN)

示例代码在上二示例代码的基础上只对第8行被了修改。第8行代码在send_keys()方法电行KPKyS.RETURN,KeYS.RETURN表示技E中谈值来源于第3行代码导入的类Keys,类Kev建。能义了大部分按键的转义字符串。下面展示y。penium库官方源代码中对类Keys的定义,根据定*司知KeyS.RETURN的值为转义字符串"ue006msend_keys()中写入的字符串信息为"pythoue006"。
执行代码后将会自动在人民邮电出版社官网的搜框输入Python,并按Enter键实现提交。执行代码后的效果如图15-39和图15-40所示。

http://www.xdnf.cn/news/15898.html

相关文章:

  • Python 数据分析模板在工程实践中的问题诊断与系统性解决方案
  • 探索量子计算与法律理论的交叉领域
  • Zephyr环境搭建 - Board GD32A503
  • 力扣 hot100 Day49
  • 数据集下载网站
  • XSS漏洞知识总结
  • [spring6: AspectMetadata AspectInstanceFactory]-源码解析
  • PCIe RAS学习专题(3):AER内核处理流程梳理
  • 消息队列:数字化通信的高效纽带
  • 1009 - 数组逆序
  • Spring监听器
  • 2.4 组件间通信Props(父传子)
  • Rust Web 全栈开发(九):增加教师管理功能
  • 【SVM smote】MAP - Charting Student Math Misunderstandings
  • Custom SRP - Custom Render Pipeline
  • RabbitMQ01——基础概念、docker配置rabbitmq、内部执行流程、五种消息类型、测试第一种消息类型
  • RabbitMQ—事务与消息分发
  • 软考 系统架构设计师系列知识点之杂项集萃(113)
  • AJAX概述
  • c++ 基本语法易错与技巧总结
  • 零基础学习性能测试-linux服务器监控:内存监控
  • fastjson2 下划线字段转驼峰对象
  • 【RK3576】【Android14】分区划分
  • 石子问题(区间dp)
  • 从Prompt到结构建模:如何以数据驱动重构日本语言学校体系?以国际日本语学院为例
  • Linux:lvs集群技术
  • LVS四种工作模式深度解析
  • 千线万网,电路之行——LVS检查的内核逻辑
  • Python day18
  • 统计EfficientNet-B7的参数个数。