python 爬虫某东网商品信息 | 没想到销量最高的是

python,爬虫,商品信息,没想到,销量,最高 · 浏览次数 : 136

小编点评

**代码解析:** ```python from selenium import webdriver import time # 创建Chrome实例 driver = webdriver.Chrome() # 获取网页 URL url = 'http://www.jd.com/' # 打开网页 driver.get(url) # 输入搜索框内容 driver.find_element(By.XPATH, '//*[@id="key"]').send_keys('python书籍') # 点击搜索按钮 driver.find_element(By.XPATH, \"//*[@class='form']/button\").click() # 获取页面内容 html_source = driver.page_source # 解析 HTML 代码 li_list = driver.find_elements(By.XPATH, '//*[@id="J_goodsList"]/ul/li') # 遍历所有商品列表元素 for li in li_list: item = {} item['name'] = li.find_element(By.XPATH, './/div[@class="p-name"]/a/em | .//div[@class="p-name p-name-type-2"]/a/em').text.strip() item['price'] = li.find_element(By.XPATH, './/div[@class="p-price"]/strong').text.strip() item['count'] = li.find_element(By.XPATH, './/div[@class="p-commit"]/strong').text.strip() item['shop'] = li.find_element(By.XPATH, './/div[@class="p-shopnum"] | .//div[@class="p-shop"]').text.strip() print(item) # 关闭浏览器 driver.quit() ``` **注意:** * 代码中使用了 BeautifulSoup 4 用于解析 HTML 页面。 * 代码中没有对获取商品数据进行清洗或处理。

正文

哈喽大家好,我是咸鱼

好久没更新 python 爬虫相关的文章了,今天我们使用 selenium 模块来简单写个爬虫程序——爬取某东网商品信息

网址链接:https://www.jd.com/

完整源码在文章最后

元素定位

我们需要找到网页上元素的位置信息(xpth 路径)
image
我们首先需要知道搜索框和搜索按钮的位置,然后才能把商品名字输入到搜索框中并点击收缩按钮

打开 F12,通过开发者调试工具检查相应的的位置,可得如下 Xpath 表达式:

# 输入框位置:
//*[@id="key"]

# 搜索按钮位置:
//*[@class='form']/button

以 python 书籍为例
image
我们需要获取商品的名字、价格、评价数量以及店铺名
image
image
然后通过发者调试工具检查相应的的位置,可得如下 Xpath 表达式:

# 当前页面商品列表
//*[@id="J_goodsList"]/ul/li

# 商品名字
.//div[@class="p-name"]/a/em | .//div[@class="p-name p-name-type-2"]/a/em

# 商品价格
.//div[@class="p-price"]/strong

# 商品评价数量
.//div[@class="p-commit"]/strong

#店铺名字
.//div[@class="p-shopnum"] | .//div[@class="p-shop"]

请注意,我在定位商品名字 xpath 的时候用了或(|),这是因为我在爬取其他商品信息的时候发现商品名字的 xpath 路径有多个

.//div[@class="p-name"]/a/em 或 .//div[@class="p-name p-name-type-2"]/a/em

image
image
商品店铺名字同理

.//div[@class="p-shopnum"] 或 .//div[@class="p-shop"]

且多个 Xpath 路径表达式可以同时使用,其语法如下:

xpath表达式1 | xpath表达式2 | xpath表达式3

实现了自动搜索后,接下来就是要抓取页面中的商品信息

需要注意的是你会发现只有将滑动条滚动至底部,商品才会全部加载完毕

我们还需要做个判断,当爬取到最后一页时,下一页这个按钮是点击不了的,这时候就退出爬虫程序

image-20230607151757989

image

代码实现

首先我们定义一个类 JdSpider,然后给它初始化对象

class JdSpider(object):
    def __init__(self):
        self.url = 'http://www.jd.com/' 
        self.options = webdriver.ChromeOptions()
        self.options.add_argument('--headless')  # 设置不显示窗口
        self.browser = webdriver.Chrome(options=self.options)  # 创建浏览器对象
        self.i = 0  # 计数,一共有多少件商品

然后是输入商品名字点击搜索按钮的代码实现

    def get_html(self):
        self.browser.get(self.url)
        self.browser.find_element(By.XPATH, '//*[@id="key"]').send_keys('python书籍')
        self.browser.find_element(By.XPATH, "//*[@class='form']/button").click()

获取信息

    def get_data(self):
        # 执行js语句,拉动进度条
        self.browser.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)'
        )
        # 给页面元素加载时预留时间
        time.sleep(2)
        # 用xpath提取每页中所有商品,最终形成一个大列表 \
        li_list = self.browser.find_elements(By.XPATH, '//*[@id="J_goodsList"]/ul/li')
        for li in li_list:
            # 构建空字典
            item = {}
            item['name']=li.find_element(By.XPATH, './/div[@class="p-name"]/a/em | .//div[@class="p-name p-name-type-2"]/a/em').text.strip()
            item['price']=li.find_element(By.XPATH, './/div[@class="p-price"]/strong').text.strip()
            item['count']=li.find_element(By.XPATH, './/div[@class="p-commit"]/strong').text.strip()
            item['shop']=li.find_element(By.XPATH, './/div[@class="p-shopnum"] | .//div[@class="p-shop"]').text.strip()
            print(item)
            self.i += 1

入口函数

    def run(self):
        # 搜索出想要抓取商品的页面
        self.get_html()
        # 循环执行点击“下一页”操作
        while True:
            # 获取每一页要抓取的数据
            self.get_data()
            # 判断是否是最一页,-1说明没找到,不是最后一页,执行点击 “下一页” 操作
            print(self.browser.page_source.find('pn-next disabled'))
            if self.browser.page_source.find('pn-next disabled') == -1:
                self.browser.find_element(By.CLASS_NAME, 'pn-next').click()
                # 预留元素加载时间
                time.sleep(1)
            else:
                print('数量', self.i)
                break

跑一下看看

image

image
小伙伴们可以对爬取到的数据进行一下数据清洗处理等操作,就能够进行数据分析了

源码如下:

from selenium import webdriver
import time
from selenium.webdriver.common.by import By


class JdSpider(object):
    def __init__(self):
        self.url = 'http://www.jd.com/'
        self.options = webdriver.ChromeOptions()
        self.options.add_argument('--headless')  # 无头模式
        self.browser = webdriver.Chrome(options=self.options)  # 创建无界面参数的浏览器对象
        self.i = 0  # 计数,一共有多少件商品
        # 输入地址+输入商品+点击按钮,切记这里元素节点是京东首页的输入栏、搜索按钮

    def get_html(self):
        self.browser.get(self.url)
        self.browser.find_element(By.XPATH, '//*[@id="key"]').send_keys('python书籍')
        self.browser.find_element(By.XPATH, "//*[@class='form']/button").click()
        # 把进度条件拉倒最底部+提取商品信息

    def get_data(self):
        # 执行js语句,拉动进度条件
        self.browser.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)'
        )
        # 给页面元素加载时预留时间
        time.sleep(2)
        # 用xpath提取每页中所有商品,最终形成一个大列表 \
        li_list = self.browser.find_elements(By.XPATH, '//*[@id="J_goodsList"]/ul/li')
        for li in li_list:
            # 构建空字典
            item = {}
            item['name']=li.find_element(By.XPATH, './/div[@class="p-name"]/a/em | .//div[@class="p-name p-name-type-2"]/a/em').text.strip()
            item['price']=li.find_element(By.XPATH, './/div[@class="p-price"]/strong').text.strip()
            item['count']=li.find_element(By.XPATH, './/div[@class="p-commit"]/strong').text.strip()
            item['shop']=li.find_element(By.XPATH, './/div[@class="p-shopnum"] | .//div[@class="p-shop"]').text.strip()
            print(item)
            self.i += 1

    def run(self):
        # 搜索出想要抓取商品的页面
        self.get_html()
        # 循环执行点击“下一页”操作
        while True:
            # 获取每一页要抓取的数据
            self.get_data()
            # 判断是否是最一页,-1说明没找到,不是最后一页,执行点击 “下一页” 操作
            print(self.browser.page_source.find('pn-next disabled'))
            if self.browser.page_source.find('pn-next disabled') == -1:
                self.browser.find_element(By.CLASS_NAME, 'pn-next').click()
                # 预留元素加载时间
                time.sleep(1)
            else:
                print('数量', self.i)
                break


if __name__ == '__main__':
    spider = JdSpider()
    spider.run()

与python 爬虫某东网商品信息 | 没想到销量最高的是相似的内容:

python 爬虫某东网商品信息 | 没想到销量最高的是

哈喽大家好,我是咸鱼 好久没更新 python 爬虫相关的文章了,今天我们使用 selenium 模块来简单写个爬虫程序——爬取某东网商品信息 网址链接:https://www.jd.com/ 完整源码在文章最后 ## 元素定位 我们需要找到网页上元素的位置信息(xpth 路径) ![image](

python教程8-页面爬虫

python爬虫常用requests和beautifulSoup这2个第三方模块。需要先进行手动安装。 requests负责下载页面数据,beautifulSoup负责解析页面标签。 关于beautifulSoup的api使用,详见api页面:https://beautifulsoup.readth

Python 爬虫实战:驾驭数据洪流,揭秘网页深处

**爬虫,这个经常被人提到的词,是对数据收集过程的一种形象化描述。特别是在Python语言中,由于其丰富的库资源和良好的易用性,使得其成为编写爬虫的绝佳选择。本文将从基础知识开始,深入浅出地讲解Python爬虫的相关知识,并分享一些独特的用法和实用技巧。本文将以实际的网站为例,深入阐述各个处理部分,

Python爬虫(二):写一个爬取壁纸网站图片的爬虫(图片下载,词频统计,思路)

好家伙,写爬虫 代码: import requests import re import os from collections import Counter import xlwt # 创建Excel文件 workbook = xlwt.Workbook(encoding='utf-8') wor

Python爬虫-王者荣耀英雄图片爬取

王者荣耀英雄图片爬取 pyquery库 https://pyquery.readthedocs.io/en/latest/ 官方文档 https://github.com/gawel/pyquery github pyquery实际上是python中的jquery 安装 pip install py

Python爬虫-爬取小说

Python爬虫-爬取小说 代码 import os from pyquery import PyQuery as pq # 1. 配置爬取信息: 待爬取网站、小说的url、小说名字 website = 'https://www.bbiquge.net' novel_url = '/book/133

python爬虫之根据期刊信息获取知网文献信息 pt.1

哈喽大家好,我是咸鱼 之前写过一篇获取知网文献信息的文章([关于《爬取知网文献信息》中代码的一些优化](http://mp.weixin.qq.com/s?__biz=MzkzNzI1MzE2Mw==&mid=2247485617&idx=1&sn=8c38163fc757784d3048e5043

通过模仿学会Python爬虫(一):零基础上手

好家伙,爬虫来了 爬虫,这玩意,不会怎么办, 诶,先抄一份作业回来 1.别人的爬虫 Python爬虫史上超详细讲解(零基础入门,老年人都看的懂)_ChenBinBini的博客-CSDN博客 # -*- codeing = utf-8 -*- from bs4 import BeautifulSoup

关于文章《爬取知网文献信息》中代码的一些优化

哈喽大家好,我是咸鱼 之前写了一篇关于文献爬虫的文章Python爬虫实战(5) | 爬取知网文献信息 文章发布之后有很多小伙伴给出了一些反馈和指正,在认真看了小伙伴们的留言之后,咸鱼对代码进行了一些优化 优化的代码在文末,欢迎各位小伙伴给出意见和指正 问题 pycharm 设置 Edge 驱动器的环

只听过 Python 做爬虫?不瞒你说 Java 也很强

网络爬虫技术,早在万维网诞生的时候,就已经出现了,今天我们就一起来揭开它神秘的面纱! 一、摘要 说起网络爬虫,相信大家都不陌生,又俗称网络机器人,指的是程序按照一定的规则,从互联网上抓取网页,然后从中获取有价值的数据,随便在网上搜索一下,排在前面基本都是 pyhton 教程介绍。 的确,pyhton