selenium 如何获取 session 指定的数据

代码核心在于这几个部分:

  其一:使用元素定位来获取页面上指定需要抓取的关键字

  其二:将页面上定位得到的数据永久存储到本地文件中。

  具体来梳理一下从访问URL开始到爬取数据整个流程下来的各个节点我们都做了哪些工作。

  我们来看看spider()方法里面具体做了哪些事情:

  spider() 方法实现

  1、创建浏览器对象

  1. # 创建浏览器对象

  2.   drver = webdriver.Chrome()

通过 webdriver.Chrome() 创建浏览器对象后,会自动启动并打开Chrome浏览器。在 Chrome() 方法中未传入任何参数,即使用默认参数 executable_path="chromedriver" ,executable_path表示的是Chrome浏览器驱动的位置,该参数默认浏览器驱动的位置是在Python安装目录下。如果你的浏览器驱动位置与默认位置不同,则 executable_path 参数需要传入驱动的实际位置。

2、访问URL地址

  1.  # 浏览器访问地址

  2.   drver.get(url)

 打开浏览器后driver调用get(url) 方法在地址栏中访问该网址。

3、隐式等待、最大化浏览器窗口

  1. # 隐式等待,确保动态内容节点被完全加载出来——时间感受不到

  2.   drver.implicitly_wait(3)

  3.   # 最大化浏览器窗口,主要是防止内容被遮挡

  4.   drver.maximize_window()

先使用 implicitly_wait() 方法隐式等待浏览器将页面完全加载出来,再使用maximize_window()将浏览器窗口最大化,防止页面元素未加载出来或被遮挡而查找失败。

4、定位搜索框

  1.  # 通过id=key定位到搜索框

  2.   input_search = drver.find_element_by_id('key')

  3.   # 在输入框中输入“口罩”

  4.   input_search.send_keys(keyword)

  5.   # 模拟键盘回车Enter操作进行搜索

  6.   input_search.send_keys(Keys.ENTER)

  7.   # 强制等待3秒

  8.   sleep(3)

driver 先调用 find_element_by_id('key') 通过ID定位到该搜索框,再调用 sent_keys() 传入参数搜索关键字 keyword ,然后在sent_keys() 中传入 Keys.ENTER 模拟键盘回车键,最后再调用 sleep(3) 强制等待搜索内容加载出来。至此, 定位搜索框->搜索框输入关键字->回车搜索 ,整个搜索流程就完成了。

5、调用 get_good() 方法抓取商品数据

  1. # 抓取商品数据

  2.   get_good(drver)

 将抓取商品数据的具体操作步骤封装成 get_good() 方法并传入driver参数调用。

6、退出浏览器

  1. # 退出关闭浏览器

  2.   drver.quit()

 抓取完商品数据后就可以直接将浏览器关闭,释放资源了。这就是整个爬取的过程,而抓取数据的过程再接着继续分析。

  get_good() 方法实现

  完整代码

  1.   # -*- coding: utf-8 -*-

  2.   # @Time : 2021/10/26 17:35

  3.   # @Author : Jane

  4.   # @Software: PyCharm

  5.   # 导入库

  6.   from time import sleep

  7.   from selenium import webdriver

  8.   from selenium.webdriver.common.keys import Keys # 键盘按键操作

  9.   from os import path

  10.   def spider(url, keyword):

  11.    # 创建浏览器对象

  12.    drver = webdriver.Chrome()

  13.    # 浏览器访问地址

  14.    drver.get(url)

  15.    # 隐式等待,确保动态内容节点被完全加载出来——时间感受不到

  16.    drver.implicitly_wait(3)

  17.    # 最大化浏览器窗口,主要是防止内容被遮挡

  18.    drver.maximize_window()

  19.    # 通过id=key定位到搜索框

  20.    input_search = drver.find_element_by_id('key')

  21.    # 在输入框中输入“口罩”

  22.    input_search.send_keys(keyword)

  23.    # 模拟键盘回车Enter操作进行搜索

  24.    input_search.send_keys(Keys.ENTER)

  25.    # 强制等待3秒

  26.    sleep(3)

  27.    # 抓取商品数据

  28.    get_good(drver)

  29.    # 退出关闭浏览器

  30.    drver.quit()

  31.   # 抓取商品数据

  32.   def get_good(driver):

  33.    # 获取当前第一页所有商品的li标签

  34.    goods = driver.find_elements_by_class_name('gl-item')

  35.    for good in goods:

  36.    # 获取商品链接

  37.    link = good.find_element_by_tag_name('a').get_attribute('href')

  38.    # 获取商品标题名称

  39.    title = good.find_element_by_css_selector('.p-name em').text.replace('\n', '')

  40.    # 获取商品价格

  41.    price = good.find_element_by_css_selector('.p-price strong').text.replace('\n', '')

  42.    # 获取商品评价数量

  43.    commit = good.find_element_by_css_selector('.p-commit a').text

  44.    # 格式化商品信息

  45.    msg = '''

  46.    商品:%s

  47.    链接:%s

  48.    价格:%s

  49.    评论:%s

  50.    '''%(title, link, price, commit)

  51.    # 保存商品数据到txt文件中

  52.    saveTXT(msg)

  53.   # 保存商品数据到txt文件中

  54.   def saveTXT(msg):

  55.    # 获取当前文件路径

  56.    paths = path.dirname(__file__)

  57.    # 将当前文件路径与文件名拼接起来作为商品数据的存储路径

  58.    file = path.join(paths, 'good_data.txt')

  59.    # 以追加写入的方式将商品数据保存到文件中

  60.    with open(file, 'a+', encoding='utf-8') as wf:

  61.    wf.write(msg)

  62.   # 判断文件程序入口

  63.   if __name__ == '__main__':

  64.   # 京东商城网址

  65.    url = 'https://www.jd.com/'

  66.    # 搜索关键字“女士编包”

  67.    keyword = '女士包包'

  68.    # 爬取数据

  69.    spider(url, keyword)

 将数据存储到CSV文件中

  1.  # -*- coding: utf-8 -*-

  2.   # @Time : 2021/10/26 17:35

  3.   # @Author : Jane

  4.   # @Software: PyCharm

  5.   # 导入库

  6.   from time import sleep

  7.   from selenium import webdriver

  8.   from selenium.webdriver.common.keys import Keys # 键盘按键操作

  9.   from os import path

  10.   import csv

  11.   def spider(url, keyword):

  12.    # 创建浏览器对象

  13.    drver = webdriver.Chrome()

  14.    # 浏览器访问地址

  15.    drver.get(url)

  16.    # 隐式等待,确保动态内容节点被完全加载出来——时间感受不到

  17.    drver.implicitly_wait(3)

  18.    # 最大化浏览器窗口,主要是防止内容被遮挡

  19.    drver.maximize_window()

  20.    # 通过id=key定位到搜索框

  21.    input_search = drver.find_element_by_id('key')

  22.    # 在输入框中输入“口罩”

  23.    input_search.send_keys(keyword)

  24.    # 模拟键盘回车Enter操作进行搜索

  25.    input_search.send_keys(Keys.ENTER)

  26.    # 强制等待3秒

  27.    sleep(3)

  28.    # 抓取商品数据

  29.    get_good(drver)

  30.    # 退出关闭浏览器

  31.    drver.quit()

  32.   # 抓取商品数据

  33.   def get_good(driver):

  34.    # 获取当前第一页所有商品的li标签

  35.    goods = driver.find_elements_by_class_name('gl-item')

  36.    data = []

  37.    for good in goods:

  38.    # 获取商品链接

  39.    link = good.find_element_by_tag_name('a').get_attribute('href')

  40.    # 获取商品标题名称

  41.    title = good.find_element_by_css_selector('.p-name em').text.replace('\n', '')

  42.    # 获取商品价格

  43.    price = good.find_element_by_css_selector('.p-price strong').text.replace('\n', '')

  44.    # 获取商品评价数量

  45.    commit = good.find_element_by_css_selector('.p-commit a').text

  46.    # 将商品数据存入字典

  47.    good_data = {

  48.    '商品标题':title,

  49.    '商品价格':price,

  50.    '商品链接':link,

  51.    '评论量':commit

  52.    }

  53.    data.append(good_data)

  54.    saveCSV(data)

  55.   # 保存商品数据到CSV文件中

  56.   def saveCSV(data):

  57.    # 表头

  58.    header = ['商品标题', '商品价格', '商品链接', '评论量']

  59.    # 获取当前文件路径

  60.    paths = path.dirname(__file__)

  61.    # 将当前文件路径与文件名拼接起来作为商品数据的存储路径

  62.    file = path.join(paths, 'good_data.csv')

  63.    # 以追加写入的方式将商品数据保存到文件中

  64.    with open(file, 'a+', encoding='utf-8', newline='') as wf:

  65.    f_csv = csv.DictWriter(wf, header)

  66.    f_csv.writeheader()

  67.    f_csv.writerows(data)

  68.   # 判断文件程序入口

  69.   if __name__ == '__main__':

  70.    # 京东商城网址

  71.    url = 'https://www.jd.com/'

  72.    # 搜索关键字“女士编包”

  73.    keyword = '女士包包'

  74.    # 爬取数据

  75.    spider(url, keyword)

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值