python爬虫——selenium爬取京东商品信息

1. 先看效果

在这里插入图片描述
在这里插入图片描述

2. 目标网站

点击跳转
在这里插入图片描述

3. 解析,首先找到输入框的id

在这里插入图片描述

4. 找到之后编写代码

# 获取输入框的id,并输入关键字python爬虫
    browser.find_element_by_id('key').send_keys('python爬虫')
    # 输入回车进行搜索
    browser.find_element_by_id('key').send_keys(Keys.ENTER)

5. 这样就再输入框中自动输入python爬虫关键字并搜索了,可以看到信息都在ul标签中,但是如果我们往下滚动,那么还会加载一部分的信息,所以我们要模拟滚动条往下拉

在这里插入图片描述

6. 模拟滚动条动作,可以看到,信息加载了很多,所以要模拟滚动条拉到下面,加载全部信息

# 将滚动条拉到最下面的位置,因为往下拉才能将这一页的商品信息全部加载出来
            browser.execute_script('document.documentElement.scrollTop=10000')

在这里插入图片描述

7. 开始获取信息,代码如下

# 开始提取信息,找到ul标签下的全部li标签
lis = browser.find_elements_by_class_name('gl-item')
# 遍历
for li in lis:
    # 名字
    name = li.find_element_by_xpath('.//div[@class="p-name p-name-type-2"]//em').text
    # 价格
    price = li.find_element_by_xpath('.//div[@class="p-price"]//i').text
    # 评论数
    comment = li.find_elements_by_xpath('.//div[@class="p-commit"]//a')
    if comment:
        comment = comment[0].text
    else:
        comment = None
    # 商铺名字
    shop_name = li.find_elements_by_class_name('J_im_icon')
    if shop_name:
        shop_name = shop_name[0].text
    else:
        shop_name = None
    # 商家类型
    shop_type = li.find_elements_by_class_name('goods-icons')
    if shop_type:
        shop_type = shop_type[0].text
    else:
        shop_type = None

    # 声明一个字典存储数据
    data_dict = {}
    data_dict['name'] = name
    data_dict['price'] = price
    data_dict['comment'] = comment
    data_dict['shop_name'] = shop_name
    data_dict['shop_type'] = shop_type

    data_list.append(data_dict)
    print(data_dict)

8. 其他需要注意的一些问题

在这里插入图片描述
在这里插入图片描述

9. 关于翻页的问题,我获取看最下面的下一页,不论我怎么试,都点击不了,也就是不能用selenium点击最下面的下一页进行翻页,所以我的方法的点击下图的下一页按钮实现翻页

在这里插入图片描述
在这里插入图片描述

10. 所以我就是获取这个元素再点击它实现翻页

#找到下一页的元素pn-next
fp_next = browser.find_element_by_css_selector('a.fp-next')
# 点击下一页
fp_next.click()

11. 最后就是当到了最后一页的时候,下一页的按钮是灰色的,也就是不能点击了,但是我们还是可以找到这个元素,所以我的想法是获取一共有多少页,然后循环这个次数就行

在这里插入图片描述
在这里插入图片描述

12. 完整代码附上

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import json
import csv
import random


# 声明一个谷歌驱动器,并设置不加载图片,间接加快访问速度
options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})
browser = webdriver.Chrome(options=options)
# url
url = 'https://www.jd.com/'
# 声明一个list,存储dict
data_list = []


def start_spider():
    # 请求url
    browser.get(url)
    # 获取输入框的id,并输入关键字python爬虫
    browser.find_element_by_id('key').send_keys('python爬虫')
    # 输入回车进行搜索
    browser.find_element_by_id('key').send_keys(Keys.ENTER)
    # 显示等待下一页的元素加载完成
    WebDriverWait(browser, 1000).until(
        EC.presence_of_all_elements_located(
            (By.CLASS_NAME, 'pn-next')
        )
    )
    # 先获取一个有多少页
    all_page = eval(browser.find_element_by_css_selector('span.p-skip em b').text)
    # 设置一个计数器
    count = 0
    # 无限循环
    while True:
        try:
            count += 1
            # 显示等待商品信息加载完成
            WebDriverWait(browser, 1000).until(
                EC.presence_of_all_elements_located(
                    (By.CLASS_NAME, 'gl-item')
                )
            )
            # 将滚动条拉到最下面的位置,因为往下拉才能将这一页的商品信息全部加载出来
            browser.execute_script('document.documentElement.scrollTop=10000')
            # 随机延迟,等下元素全部刷新
            time.sleep(random.randint(1, 3))
            browser.execute_script('document.documentElement.scrollTop=0')

            # 开始提取信息,找到ul标签下的全部li标签
            lis = browser.find_elements_by_class_name('gl-item')
            # 遍历
            for li in lis:
                # 名字
                name = li.find_element_by_xpath('.//div[@class="p-name p-name-type-2"]//em').text
                # 价格
                price = li.find_element_by_xpath('.//div[@class="p-price"]//i').text
                # 评论数
                comment = li.find_elements_by_xpath('.//div[@class="p-commit"]//a')
                if comment:
                    comment = comment[0].text
                else:
                    comment = None
                # 商铺名字
                shop_name = li.find_elements_by_class_name('J_im_icon')
                if shop_name:
                    shop_name = shop_name[0].text
                else:
                    shop_name = None
                # 商家类型
                shop_type = li.find_elements_by_class_name('goods-icons')
                if shop_type:
                    shop_type = shop_type[0].text
                else:
                    shop_type = None

                # 声明一个字典存储数据
                data_dict = {}
                data_dict['name'] = name
                data_dict['price'] = price
                data_dict['comment'] = comment
                data_dict['shop_name'] = shop_name
                data_dict['shop_type'] = shop_type

                data_list.append(data_dict)
                print(data_dict)
        except Exception as e:
            continue

        # 如果count==all_page就退出循环
        if count == all_page:
            break
        # 找到下一页的元素pn-next
        fp_next = browser.find_element_by_css_selector('a.fp-next')
        # 点击下一页
        fp_next.click()


def main():

    start_spider()
    # 将数据写入jsonwenj
    with open('data_json.json', 'a+', encoding='utf-8') as f:
        json.dump(data_list, f, ensure_ascii=False, indent=4)
    print('json文件写入完成')

    with open('data_csv.csv', 'w', encoding='utf-8', newline='') as f:
        # 表头
        title = data_list[0].keys()
        # 声明writer
        writer = csv.DictWriter(f, title)
        # 写入表头
        writer.writeheader()
        # 批量写入数据
        writer.writerows(data_list)
    print('csv文件写入完成')


if __name__ == '__main__':

    main()
    # 退出浏览器
    browser.quit()
  • 16
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Selenium是一个用于自动化浏览器操作的工具,可以用来爬取京东商品信息。在使用Selenium爬取京东手机信息时,可以按照以下步骤进行操作: 1. 首先,使用Selenium打开京东网站。可以使用`webdriver.Chrome()`来打开Chrome浏览器,并使用`browser.get('https://www.jd.com/')`来打开京东网站。 2. 定位输入框和搜索按钮。可以使用`find_element_by_css_selector`方法来定位输入框和搜索按钮的元素,并使用`send_keys`方法输入关键字,最后使用`click`方法点击搜索按钮。 3. 判断是否有弹窗。有时候京东网站会弹出覆盖页面的弹窗,无法使用Selenium进行页面元素获取和点击。可以使用一个函数来判断弹窗是否存在,如果存在则关闭弹窗。 4. 获取商品分类列表。可以通过分析网页源代码,找到三级分类商品的超链接,通过href进入商品列表。可以使用XPath来定位超链接的元素,并使用`execute_script`方法打开新的窗口,然后切换到新窗口进行操作。 5. 进入商品列表页面。在商品列表页面中,可以使用相应的方法来获取商品的详细信息,如商品名称、价格、评价等。 以上是使用Selenium爬取京东手机信息的大致步骤,具体的代码实现可以参考引用\[1\]和引用\[2\]中的示例代码。希望对你有帮助! #### 引用[.reference_title] - *1* [一篇就够!selenium教你爬取京东商品。](https://blog.csdn.net/qq_47828130/article/details/119735165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [python-selenium自动爬取京东手机端全部类别数据----“从祖爬到孙”](https://blog.csdn.net/qq_43666365/article/details/120577139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值