selenium翻页获取京东图书名称和价格

selenium翻页获取京东图书名称和价格

案例目的:

通过selenium翻页爬取京东图书名称和价格,介绍如何通过selenium模拟鼠标滑轮,点击,翻页等操作。

案例功能:

输入要爬取的页数,批量下载每一页数图书的名称和价格,并保存到本地。

案例分析:

1.找到目标页面的url(我们以中国当代小说为例)

在这里插入图片描述

2.通过模拟滚轮实现异步加载:

注:每一页共有60本书,但是:如果没有手动通过滑轮获取剩下的30个数据,通过xpath页只能获取30个,这就是我们为什么要模拟鼠标滑轮的原因。
在这里插入图片描述

当我们把滑轮滑倒最底部,就会得到加载剩余的30个数据:

当然,价格也是同理。
在这里插入图片描述
名称和价格的xpath,以及鼠标滑轮已经介绍完毕。

3.接下来就是通过selenuim进行翻页。

selenium翻页原理:通过定位下一页的标签,然后模拟点击操作,实现翻页。如下图:
在这里插入图片描述

这里说一下注意事项:

1.selenuim模拟浏览器时可能会因为网络的问题,加载时间延长。因此,爬取每一页数据都要设置延时操作,延时时间根据自己的网速设置。

2.在实现滑轮滑动时,scrollTop后面对应的参数是滑轮所在的位置,如果scrollTop=0就代表在最上方,我是通过调试,得到5000比较合适。
在这里插入图片描述

3.在selenium中使用find_element_by_xpath进行定位时,只是定义节点,而不是文本和属性。
在这里插入图片描述

4.关于数据保存的细节我就不多说了,我的前几篇文章介绍的都有,大家可以做参考。

分析完毕,开始上代码:

from selenium.webdriver import Chrome
import time
from lxml import etree
import json

if __name__ == '__main__':
    # 输入要去的页数
    pages = int(input('请输入要爬取的页数:'))
    # 创建浏览器
    chrome = Chrome()
    # 在网址栏输入url
    chrome.get('https://list.jd.com/list.html?cat=1713,3258,3297')
    # 创建循环
    for i in range(pages):
        # 页面等待
        time.sleep(10)
        # 通过滑轮进行异步加载
        js_ = 'document.documentElement.scrollTop=5000'
        chrome.execute_script(js_)
        time.sleep(2)
        # 获取页面数据
        html_data = chrome.page_source
        # 将数据转换成py格式
        py_data = etree.HTML(html_data)
        # 提取目标数据 1.图书名称,2.图书价格
        title_list = py_data.xpath('//div[@class="gl-i-wrap"]/div[@class="p-name"]/a/em/text()')
        price_list = py_data.xpath('//strong/i/text()')
        print(len(title_list))
        print(len(price_list))
        # 将输入存进字典,并转换成json格式
        for i in range(len(title_list)):
            dict_ = {}
            dict_[title_list[i]] = price_list[i]
            # 将字典转换成json格式数据
            json_data = json.dumps(dict_,ensure_ascii=False)+',\n'
            # 将json数据保存到本地
            with open('京东图书名称和价格.json','a',encoding='utf-8')as f:
                f.write(json_data)
        # 模拟点击下一页
        click_obj = chrome.find_element_by_xpath('//span/a[@class="pn-next"]')
        # 模拟点击
        click_obj.click()
    # 爬取过程完成后,关闭浏览器
    chrome.quit()

我一共爬取了3页。每页对应60个数据

爬取结果如下:

在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是使用selenium模拟翻页爬取京东图书名称价格的示例代码: ```python from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys # 创建浏览器实例 driver = webdriver.Chrome() # 打开京东图书页面 driver.get("https://book.jd.com/") # 定位搜索框并输入关键词 search_box = driver.find_element_by_id("key") search_box.send_keys("python") search_box.send_keys(Keys.ENTER) # 模拟鼠标滚动到页面底部 actions = ActionChains(driver) actions.move_to_element(driver.find_element_by_tag_name("body")) actions.perform() # 获取第一页的图书名称价格 book_names = driver.find_elements_by_css_selector(".p-name a") book_prices = driver.find_elements_by_css_selector(".p-price i") for name, price in zip(book_names, book_prices): print("书名:", name.text) print("价格:", price.text) print("--") # 模拟点击下一页按钮 next_page = driver.find_element_by_css_selector(".pn-next") next_page.click() # 获取第二页的图书名称价格 book_names = driver.find_elements_by_css_selector(".p-name a") book_prices = driver.find_elements_by_css_selector(".p-price i") for name, price in zip(book_names, book_prices): print("书名:", name.text) print("价格:", price.text) print("--") # 关闭浏览器 driver.quit() ``` 注意事项: 1. 需要安装selenium库和对应的浏览器驱动(如ChromeDriver)。 2. 在代码中使用了Chrome浏览器和ChromeDriver作为示例,你可以根据自己的需求选择其他浏览器和对应的驱动。 3. 代码中的关键元素定位使用了CSS选择器,你也可以使用其他定位方式。 4. 在实际使用中,可能需要添加等待时间或其他操作来确保页面加载完成或处理弹窗等情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜的乄第七章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值