IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python+Selenium实战之爬取京东商品数据 -> 正文阅读

[Python知识库]Python+Selenium实战之爬取京东商品数据

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

  • 其一:使用元素定位来获取页面上指定需要抓取的关键字;
  • 其二:将页面上定位得到的数据永久存储到本地文件中。

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

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

spider() 方法实现

1、创建浏览器对象

# 创建浏览器对象
drver = webdriver.Chrome()

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

2、访问URL地址

# 浏览器访问地址
drver.get(url)

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

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

# 隐式等待,确保动态内容节点被完全加载出来——时间感受不到
drver.implicitly_wait(3)
# 最大化浏览器窗口,主要是防止内容被遮挡
drver.maximize_window()

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

3、定位搜索框

# 通过id=key定位到搜索框
input_search = drver.find_element_by_id('key')
# 在输入框中输入“口罩”
input_search.send_keys(keyword)
# 模拟键盘回车Enter操作进行搜索
input_search.send_keys(Keys.ENTER)
# 强制等待3秒
sleep(3)

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

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

# 抓取商品数据
get_good(drver)

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

5、退出浏览器

# 退出关闭浏览器
drver.quit()

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

get_good() 方法实现

完整代码

# -*- coding: utf-8 -*-
# @Time : 2021/10/26 17:35
# @Author : Jane
# @Software: PyCharm


# 导入库
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys # 键盘按键操作
from os import path


def spider(url, keyword):
    # 创建浏览器对象
    drver = webdriver.Chrome()
    # 浏览器访问地址
    drver.get(url)
    # 隐式等待,确保动态内容节点被完全加载出来——时间感受不到
    drver.implicitly_wait(3)
    # 最大化浏览器窗口,主要是防止内容被遮挡
    drver.maximize_window()
    # 通过id=key定位到搜索框
    input_search = drver.find_element_by_id('key')
    # 在输入框中输入“口罩”
    input_search.send_keys(keyword)
    # 模拟键盘回车Enter操作进行搜索
    input_search.send_keys(Keys.ENTER)
    # 强制等待3秒
    sleep(3)
    # 抓取商品数据
    get_good(drver)
    # 退出关闭浏览器
    drver.quit()


# 抓取商品数据
def get_good(driver):
    # 获取当前第一页所有商品的li标签
    goods = driver.find_elements_by_class_name('gl-item')
    for good in goods:
        # 获取商品链接
        link = good.find_element_by_tag_name('a').get_attribute('href')
        # 获取商品标题名称
        title = good.find_element_by_css_selector('.p-name em').text.replace('\n', '')
        # 获取商品价格
        price = good.find_element_by_css_selector('.p-price strong').text.replace('\n', '')
        # 获取商品评价数量
        commit = good.find_element_by_css_selector('.p-commit a').text
        # 格式化商品信息
        msg = '''
            商品:%s
            链接:%s
            价格:%s
            评论:%s
        '''%(title, link, price, commit)
        # 保存商品数据到txt文件中
        saveTXT(msg)


# 保存商品数据到txt文件中
def saveTXT(msg):
    # 获取当前文件路径
    paths = path.dirname(__file__)
    # 将当前文件路径与文件名拼接起来作为商品数据的存储路径
    file = path.join(paths, 'good_data.txt')
    # 以追加写入的方式将商品数据保存到文件中
    with open(file, 'a+', encoding='utf-8') as wf:
        wf.write(msg)

# 判断文件程序入口
if __name__ == '__main__':
	# 京东商城网址
    url = 'https://www.jd.com/'
    # 搜索关键字“女士编包”
    keyword = '女士包包'
    # 爬取数据
    spider(url, keyword)

2、将数据存储到CSV文件中

# -*- coding: utf-8 -*-
# @Time : 2021/10/26 17:35
# @Author : Jane
# @Software: PyCharm


# 导入库
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys # 键盘按键操作
from os import path
import csv


def spider(url, keyword):
    # 创建浏览器对象
    drver = webdriver.Chrome()
    # 浏览器访问地址
    drver.get(url)
    # 隐式等待,确保动态内容节点被完全加载出来——时间感受不到
    drver.implicitly_wait(3)
    # 最大化浏览器窗口,主要是防止内容被遮挡
    drver.maximize_window()
    # 通过id=key定位到搜索框
    input_search = drver.find_element_by_id('key')
    # 在输入框中输入“口罩”
    input_search.send_keys(keyword)
    # 模拟键盘回车Enter操作进行搜索
    input_search.send_keys(Keys.ENTER)
    # 强制等待3秒
    sleep(3)
    # 抓取商品数据
    get_good(drver)
    # 退出关闭浏览器
    drver.quit()

# 抓取商品数据
def get_good(driver):
    # 获取当前第一页所有商品的li标签
    goods = driver.find_elements_by_class_name('gl-item')
    data = []
    for good in goods:
        # 获取商品链接
        link = good.find_element_by_tag_name('a').get_attribute('href')
        # 获取商品标题名称
        title = good.find_element_by_css_selector('.p-name em').text.replace('\n', '')
        # 获取商品价格
        price = good.find_element_by_css_selector('.p-price strong').text.replace('\n', '')
        # 获取商品评价数量
        commit = good.find_element_by_css_selector('.p-commit a').text
        # 将商品数据存入字典
        good_data = {
            '商品标题':title,
            '商品价格':price,
            '商品链接':link,
            '评论量':commit
        }
        data.append(good_data)
    saveCSV(data)


# 保存商品数据到CSV文件中
def saveCSV(data):
    # 表头
    header = ['商品标题', '商品价格', '商品链接', '评论量']
    # 获取当前文件路径
    paths = path.dirname(__file__)
    # 将当前文件路径与文件名拼接起来作为商品数据的存储路径
    file = path.join(paths, 'good_data.csv')
    # 以追加写入的方式将商品数据保存到文件中
    with open(file, 'a+', encoding='utf-8', newline='') as wf:
        f_csv = csv.DictWriter(wf, header)
        f_csv.writeheader()
        f_csv.writerows(data)


# 判断文件程序入口
if __name__ == '__main__':
    # 京东商城网址
    url = 'https://www.jd.com/'
    # 搜索关键字“女士编包”
    keyword = '女士包包'
    # 爬取数据
    spider(url, keyword)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章           查看所有文章
加:2021-11-04 13:41:27  更:2021-11-04 13:41:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:04:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码