Selenium实战之Python+Selenium爬取京东商品数据

这篇具有很好参考价值的文章主要介绍了Selenium实战之Python+Selenium爬取京东商品数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实战目标:爬取京东商品信息,包括商品的标题、链接、价格、评价数量。

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

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

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

爬取京东商品数据具体过程分析

1、准备接口数据

# 京东商城网址
url = 'https://www.jd.com/'

2、创建浏览器实例对象

# driver = webdriver.Firefox()      # 创建 Firefox 浏览器实例对象
# driver = webdriver.Ie()           # 创建 IE 浏览器实例对象
# driver = webdriver.Edge()         # 创建 Edge 浏览器实例对象
# driver = webdriver.Safari()       # 创建 Safari 浏览器实例对象
# driver = webdriver.Opera()        # 创建 Opera 浏览器实例对象
driver = webdriver.Chrome()         # 创建 Chrome 浏览器实例对象

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

driver = webdriver.Chrome(executable_path="D:/driver/chromedriver.exe") 

2、访问URL

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

打开浏览器后driver调用get(url) 方法在地址栏中访问该网址。相当于在地址栏输入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、定位元素(商品的标题、链接、价格、评价数量)

# 获取当前第一页所有商品的li标签
goods = driver.find_elements_by_class_name('gl-item')
for good in goods:   
    # 获取商品标题
    title = good.find_element_by_css_selector('.p-name em').text.replace('\n', '')
    # 获取商品链接
    link = good.find_element_by_tag_name('a').get_attribute('href')
    # 获取商品价格
    price = good.find_element_by_css_selector('.p-price strong').text.replace('\n', '')
    # 获取商品评价数量
    commit = good.find_element_by_css_selector('.p-commit a').text

driver 通过调用 find_elements_by_class_name('gl-item') 方法定位 class=“gl-item” 到该页面所有商品的 <li> 标签,再接着遍历所有的 <li> 标签,分别通过不同定位方式查找到商品链接、商品标题、商品价格以及商品评价数量。

  • 定位商品标题:通过 CSS选择器 定位到该元素标签,再调用其属性 text 获取到标签内的文本内容(即商品标题),最后使用 replace() 方法使用 空字符串 代替 换行符 以达到去掉标题中的换行符的目的,这样完整的商品标题就成功获取了。

    # 获取商品标题名称
    title = good.find_element_by_css_selector('.p-name em').text.replace('\n', '')
    
    Selenium实战之Python+Selenium爬取京东商品数据
  • 定位商品链接:通过先定位 <a> 标签再指定获取其属性 href 的值,最终获取到商品的链接。

    # 获取商品链接
    link = good.find_element_by_tag_name('a').get_attribute('href')
    
    Selenium实战之Python+Selenium爬取京东商品数据
  • 定位商品价格:通过 CSS选择器 定位到该元素标签,再调用其属性 text 获取到标签内的文本内容(即商品价格),最后使用 replace() 方法使用 空字符串 代替 换行符 以达到去掉文本中的换行符的目的,这样完整的商品价格就成功获取了。

    # 获取商品价格
    price = good.find_element_by_css_selector('.p-price strong').text.replace('\n', '')
    
    Selenium实战之Python+Selenium爬取京东商品数据
  • 定位商品评论数量:通过 CSS选择器 定位到该元素标签,再调用其属性 text 获取到标签内的文本内容(即商品价格)。

    # 获取商品评价数量
    commit = good.find_element_by_css_selector('.p-commit a').text
    
    Selenium实战之Python+Selenium爬取京东商品数据

5、将商品数据存储到文件中

①存储到txt文件中

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

②存储到CSV文件中

# 表头
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)

6、退出浏览器

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

抓取完商品数据后就可以直接将浏览器关闭,释放资源了。这就是整个爬取的过程,而抓取数据的过程再接着继续分析。文章来源地址https://www.toymoban.com/news/detail-412473.html

完整示例代码

①存储到txt文件中

# -*- 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


# 京东商城网址
url = 'https://www.jd.com/'
# 创建浏览器对象
driver = webdriver.Chrome()
# 浏览器访问地址
driver.get(url)
# 隐式等待,确保动态内容节点被完全加载出来——时间感受不到
driver.implicitly_wait(3)
# 最大化浏览器窗口,主要是防止内容被遮挡
driver.maximize_window()
# 通过id=key定位到搜索框
input_search = driver.find_element_by_id('key')
# 在输入框中输入“口罩”
input_search.send_keys('女士包包')
# 模拟键盘回车Enter操作进行搜索
input_search.send_keys(Keys.ENTER)
# 强制等待3秒
sleep(3)
# 获取当前第一页所有商品的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)
    # 获取当前文件路径
    paths = path.dirname(__file__)
    # 将当前文件路径与文件名拼接起来作为商品数据的存储路径
    file = path.join(paths, 'good.txt')
    # 以追加写入的方式将商品数据保存到文件中
    with open(file, 'a+', encoding='utf-8', newline='') as wf:
        wf.write(msg)
# 退出关闭浏览器
driver.quit()

②存储到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


# 京东商城网址
url = 'https://www.jd.com/'
# 创建浏览器对象
driver = webdriver.Chrome()
# 浏览器访问地址
driver.get(url)
# 隐式等待,确保动态内容节点被完全加载出来——时间感受不到
driver.implicitly_wait(3)
# 最大化浏览器窗口,主要是防止内容被遮挡
driver.maximize_window()
# 通过id=key定位到搜索框
input_search = driver.find_element_by_id('key')
# 在输入框中输入“口罩”
input_search.send_keys('女士包包')
# 模拟键盘回车Enter操作进行搜索
input_search.send_keys(Keys.ENTER)
# 强制等待3秒
sleep(3)
# 获取当前第一页所有商品的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)

# 表头
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)
    
# 退出关闭浏览器
driver.quit()

③将代码进行封装

# -*- 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)

到了这里,关于Selenium实战之Python+Selenium爬取京东商品数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫——python爬取京东商品用户评价

    以小米手环7为例,分别爬取小米手环7用户评价中的好评、中评、差评 使用工具:PyCharm Community 需要python库:requests 安装方法:File--Settings--Project --Python Interpreter 代码如下: 好评: 中评: 差评: 其中重要参数来源: 打开开发者工具,快捷键F12键,或鼠标右键--检查--网络

    2024年02月11日
    浏览(26)
  • Python如何运用爬虫爬取京东商品评论

    打开京东商品网址(添加链接描述) 查看商品评价 。我们点击评论翻页,发现网址未发生变化,说明该网页是动态网页。 我们在 浏览器右键点击“检查” ,,随后 点击“Network” ,刷新一下,在搜索框中 输入”评论“ ,最终找到 网址(url) 。我们点击Preview,发现了我们需要

    2024年02月07日
    浏览(32)
  • 当我用Python爬取了京东商品所有评论后发现....

    不知道各位网购的时候,是否会去留意商品评价,有些小伙伴是很在意评价的,看到差评就不想买了,而有些小伙伴则是会对差评进行理性分析,而还有一类人不在乎这个。 当然这都是题外话,咱们今天主要的目的是使用Python来爬取某东商品的评价,并保存到CSV表格。 在进

    2024年02月11日
    浏览(21)
  • Python实战:用Selenium爬取网页数据

    网络爬虫是Python编程中一个非常有用的技巧,它可以让您自动获取网页上的数据。在本文中,我们将介绍如何使用Selenium库来爬取网页数据,特别是那些需要模拟用户交互的动态网页。 Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的操作,比如点击按钮、填写表

    2024年02月06日
    浏览(25)
  • Python爬虫实战——Lazada商品数据(selenium自动化爬虫,xpath定位)

            在此说明,这个项目是我第一次真正去爬的一个网站,里面写的代码我自己都看不下去,但是已经不想花时间去重构了,所以看个乐呵就好,要喷也可以(下手轻一点)。这篇文算是记录我的学习中出现的一些问题,不建议拿来学习和真拿我的代码去爬Lazada的数据,

    2024年02月02日
    浏览(32)
  • selenium京东商城爬取

     该项目主要参考与:http://c.biancheng.net/python_spider/selenium-case.html 你看完上述项目内容之后,会发现京东登录是一个比较坑的点,selenium控制浏览器没有登录京东,导致我们自动爬取网页被重定向到京东登录注册页面。 因此,我们要单独能一个登录注册。 但是,发现京东的验证功

    2024年02月07日
    浏览(26)
  • Python实战:使用selenium及BeautifulSoup4进行BOOS直聘信息爬取与数据累积【附源码】

    操作系统 :适用于Windows、macOS、Linux。 Python版本 :Python 3.6及以上。 依赖库 : selenium:用于模拟浏览器操作。 webdriver_manager:自动管理驱动程序。 BeautifulSoup4:解析HTML页面。 pandas:数据处理和CSV文件操作。 logging:日志记录。 本项目旨在通过Selenium模拟用户浏览器行为,获

    2024年04月27日
    浏览(23)
  • Python爬取电商数据:商品采集接口 商品详情数据API 商品主图接口

    学习 Python 自动化的一个好办法就是构建一个价格追踪器。由于这项任务生成的脚本可以立即投入使用,所以对于初学者来说尤为方便。本文将向大家介绍如何用 Python 采集器建立一个可立即实现电商价格监控的可扩展价格追踪器。 价格监控的好处多多。对于您个人来说,通

    2023年04月24日
    浏览(28)
  • python数据采集课设-京东手机评论爬取与分析

    1.手机评论采集,数据信息(评论,评分,用户,评论发布时间) 爬取不同的手机评论,需要设置不同的id  如上图红圈处即为手机vivo S12的id 结果展示: 2.去除停用词以及词云图展示: 本节代码对多款手机的评论进行循环处理 此代码需要使用的stopwords.txt文件以上传至资源

    2024年02月15日
    浏览(24)
  • Selenium Python 实战:爬取个股实时信息

    Selenium是广泛使用的开源Web UI(用户界面)自动化测试套件之一。支持Chrome, Edge, Firfox等常见浏览器。除用于web应用程序自动化测试外,Selenium 也适合用于抓取JavaScript 动态网页数据。 本文演示如何使用 Selenium python库编程来爬取个股数据。 用pip安装 selenium库 下载浏览器的驱动

    2024年01月23日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包