赣州高端网站开发,全国工商企业信息查询官网,英才简历在线制作网站,wordpress主题评论此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 执行JS脚本(把滚动条拉到底部)#xff0c;并以具体的示例进行展示。
1、Selenium 设置无界面模式
创建浏览器对象之前#xff0c;创建 options 功能对象 #xff1a;options webdriver.ChromeOptions() 添加…此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 执行JS脚本(把滚动条拉到底部)并以具体的示例进行展示。
1、Selenium 设置无界面模式
创建浏览器对象之前创建 options 功能对象 options webdriver.ChromeOptions() 添加无界面功能参数options.add_argument(--headless) 构造浏览器对象打开浏览器并设置 options 参数
browser webdriver.Chrome(optionsoptions)
from selenium import webdriver
options webdriver.ChromeOptions() # 创建浏览器对象之前创建options功能对象 options.add_argument(--headless) # 添加无界面功能参数 browser webdriver.Chrome(optionsoptions) # 构造浏览器对象打开浏览器
2、Selenium 执行JS脚本
创建浏览器对象browser webdriver.Chrome() 执行JS脚本browser.execute_script() 最常用脚本 - 把滚动条拉到底部browser.execute_script(window.scrollTo(0,document.body.scrollHeight)) from selenium import webdriver
browser webdriver.Chrome() # 创建浏览器对象 browser.execute_script( window.scrollTo(0,document.body.scrollHeight) ) # 把滚动条拉到最底部
3、Selenium 设置无界面模式 执行JS脚本 案例
3.1 需求分析 基于 Selenium Chrome 抓取 http://www.jd.com/ 下 “python书籍” 的信息
3.2 爬虫思路 打开浏览器输入主页地址https://www.jd.com/ 使用 Selenium 的 Xpath 找到 信息输入框 和 点击搜索 节点//*[idkey] //*[idsearch]/div/div[2]/button
输入 “python书籍” 并点击 点击搜索按钮 使用 Selenium 的 Xpath 找到 书籍信息 节点对象列表 //*[idJ_goodsList]/ul/li 依次遍历每个元素并依次提取每本书籍信息 爬取完一页信息后需要判断是否是最后一页
可以看到 最后一页的节点信息为pn-next disabled 非最后一页的节点信息为pn-next 如果不是最后一页点击下一页继续进行爬取//*[idJ_bottomPage]/span[1]/a[9]
3.3 程序实现
初始化函数 def __init__(self): # 设置为无界面 self.options webdriver.ChromeOptions() # 创建浏览器对象之前创建options功能对象 self.options.add_argument(--headless) # 添加无界面功能参数 self.driver webdriver.Chrome(optionsself.options) # 构造浏览器对象打开浏览器 self.driver.get(urlhttp://www.jd.com/) # 进入主页 # 搜索框发送python书籍点击搜索按钮 self.inputJD self.driver.find_element(By.XPATH, //*[idkey]) # 搜索框xpath://*[idkey] self.inputJD.send_keys(python书籍) self.driver.find_element(By.XPATH, //*[idsearch]/div/div[2]/button).click() # 搜索按钮xpath//*[idsearch]/div/div[2]/button 并点击 time.sleep(1) # 要给页面元素加载预留时间
提取数据函数 def parse_html(self): function: 具体提取数据方法 in: None out: None return: None others: Data Extraction Func self.driver.execute_script( window.scrollTo(0,document.body.scrollHeight) ) # 先把滚动条拉到最底部等待所有商品加载完成再进行数据爬取 time.sleep(3) # 给页面元素加载预留时间 # 具体提取数据 li_list self.driver.find_elements(By.XPATH, //*[idJ_goodsList]/ul/li) # 基准xpath//*[idJ_goodsList]/ul/li 每一个商品对应一个li节点 item {} # 定义一个空字典 for li in li_list: item[名称] li.find_element(By.XPATH, .//div[classp-name]/a/em).text.strip() item[价格] li.find_element(By.XPATH, .//div[classp-price]/strong).text.strip() item[评价] li.find_element(By.XPATH, .//div[classp-commit]/strong).text.strip() item[商家] li.find_element(By.XPATH, .//div[classp-shopnum]).text.strip() print(item) # 打印
程序入口函数 def run(self): function: 程序入口函数 in: None out: None return: None others: Program Entry Func while True: self.parse_html() # 不是最后一页pn-next # 最后一页pn-next disabled if self.driver.page_source.find(pn-next disabled) -1: # 没有找到 pn-next disabled说明不是最后一页 self.driver.find_element(By.XPATH, //*[idJ_bottomPage]/span[1]/a[9]).click() time.sleep(1) else: self.driver.quit() break 3.4 完整代码
import time from selenium import webdriver from selenium.webdriver.common.by import By
class JDSpider: def __init__(self): # 设置为无界面 self.options webdriver.ChromeOptions() # 创建浏览器对象之前创建options功能对象 self.options.add_argument(--headless) # 添加无界面功能参数 self.driver webdriver.Chrome(optionsself.options) # 构造浏览器对象打开浏览器 self.driver.get(urlhttp://www.jd.com/) # 进入主页 # 搜索框发送python书籍点击搜索按钮 self.inputJD self.driver.find_element(By.XPATH, //*[idkey]) # 搜索框xpath://*[idkey] self.inputJD.send_keys(python书籍) self.driver.find_element(By.XPATH, //*[idsearch]/div/div[2]/button).click() # 搜索按钮xpath//*[idsearch]/div/div[2]/button 并点击 time.sleep(1) # 要给页面元素加载预留时间 def parse_html(self): function: 具体提取数据方法 in: None out: None return: None others: Data Extraction Func self.driver.execute_script( window.scrollTo(0,document.body.scrollHeight) ) # 先把滚动条拉到最底部等待所有商品加载完成再进行数据爬取 time.sleep(3) # 给页面元素加载预留时间 # 具体提取数据 li_list self.driver.find_elements(By.XPATH, //*[idJ_goodsList]/ul/li) # 基准xpath//*[idJ_goodsList]/ul/li 每一个商品对应一个li节点 item {} # 定义一个空字典 for li in li_list: item[名称] li.find_element(By.XPATH, .//div[classp-name]/a/em).text.strip() item[价格] li.find_element(By.XPATH, .//div[classp-price]/strong).text.strip() item[评价] li.find_element(By.XPATH, .//div[classp-commit]/strong).text.strip() item[商家] li.find_element(By.XPATH, .//div[classp-shopnum]).text.strip() print(item) # 打印 def run(self): function: 程序入口函数 in: None out: None return: None others: Program Entry Func while True: self.parse_html() # 不是最后一页pn-next # 最后一页pn-next disabled if self.driver.page_source.find(pn-next disabled) -1: # 没有找到 pn-next disabled说明不是最后一页 self.driver.find_element(By.XPATH, //*[idJ_bottomPage]/span[1]/a[9]).click() time.sleep(1) else: self.driver.quit() break
if __name__ __main__: spider JDSpider() spider.run()
3.5 实现效果