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所示。