脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 详解Python如何批量采集京东商品数据流程

详解Python如何批量采集京东商品数据流程

2022-08-30 09:44轻松学Python Python

这不快过年了,又是要买年货,又是要给女朋友买礼物的,分析一下价格,看看哪些是真的降价了

准备工作

 

驱动安装

实现案例之前,我们要先安装一个谷歌驱动,因为我们是使用selenium 操控谷歌驱动,然后操控浏览器实现自动操作的,模拟人的行为去操作浏览器。

以谷歌浏览器为例,打开浏览器看下我们自己的版本,然后下载跟自己浏览器版本一样或者最相近的版本,下载后解压一下,把解压好的插件放到我们的python环境里面,或者和代码放到一起也可以。

 

模块使用与介绍

  • selenium pip install selenium ,直接输入selenium的话是默认安装最新的,selenium后面加上版本号就是安装对应的的版本;
  • csv 内置模块,不需要安装,把数据保存到Excel表格用的;
  • time 内置模块,不需要安装,时间模块,主要用于延时等待;

 

流程解析

我们访问一个网站,要输入一个网址,所以代码也是这么写的。

首先导入模块

from selenium import webdriver

文件名或者包名不要命名为selenium,会导致无法导入。 webdriver可以认为是浏览器的驱动器,要驱动浏览器必须用到webdriver,支持多种浏览器。

实例化浏览器对象 ,我这里用的是谷歌,建议大家用谷歌,方便一点。

driver = webdriver.Chrome()

我们用get访问一个网址,自动打开网址。

driver.get("https://www.jd.com/")

运行一下

详解Python如何批量采集京东商品数据流程

打开网址后,以买口红为例。

我们首先要通过你想购买的商品关键字来搜索得到商品信息,用搜索结果去获取信息。

详解Python如何批量采集京东商品数据流程

那我们也要写一个输入,空白处点击右键,选择检查。

选择element 元素面板

详解Python如何批量采集京东商品数据流程

鼠标点击左边的箭头按钮,去点击搜索框,它就会直接定位到搜索标签。

详解Python如何批量采集京东商品数据流程

在标签上点击右键,选择copy,选择copy selector 。

详解Python如何批量采集京东商品数据流程

如果你是xpath ,就copy它的xpath 。

然后把我们想要搜索的内容写出来

driver.find_element_by_css_selector("#key").send_keys("口红")

再运行的时候,它就会自动打开浏览器进入目标网址搜索口红。

详解Python如何批量采集京东商品数据流程

同样的方法,找到搜索按钮进行点击。

driver.find_element_by_css_selector(".button").click()

再运行就会自动点击搜索了

页面搜索出来了,那么咱们正常浏览网页是要下拉网页对吧,咱们让它自动下拉就好了。 先导入time模块

import time

执行页面滚动的操作

def drop_down():
    """执行页面滚动的操作"""  # javascript
    for x in range(1, 12, 2):  # for循环下拉次数,取1 3 5 7 9 11, 在你不断的下拉过程中, 页面高度也会变的;
        time.sleep(1)
        j = x / 9  # 1/9  3/9  5/9  9/9
        # document.documentElement.scrollTop  指定滚动条的位置
        # document.documentElement.scrollHeight 获取浏览器页面的最大高度
        js = "document.documentElement.scrollTop = document.documentElement.scrollHeight * %f" % j
        driver.execute_script(js)  # 执行我们JS代码

循环写好了,然后调用一下。

drop_down()

详解Python如何批量采集京东商品数据流程

我们再给它来个延时

driver.implicitly_wait(10)

这是一个隐式等待,等待网页延时,网不好的话加载很慢。

隐式等待不是必须等十秒,在十秒内你的网络加载好后,它随时会加载,十秒后没加载出来的话才会强行加载。

还有另外一种死等的,你写的几秒就等几秒,相对没有那么人性化。

time.sleep(10)

加载完数据后我们需要去找商品数据来源

价格/标题/评价/封面/店铺等等

还是鼠标右键点击检查,在element ,点击小箭头去点击你想查看的数据。

可以看到都在li标签里面

详解Python如何批量采集京东商品数据流程

获取所有的 li 标签内容,还是一样的,直接copy 。

详解Python如何批量采集京东商品数据流程

在左下角就有了

详解Python如何批量采集京东商品数据流程

这里表示的是取的第一个,但是我们是要获取所有的标签,所以左边框框里 li 后面的可以删掉不要。

详解Python如何批量采集京东商品数据流程

不要的话,可以看到这里是60个商品数据,一页是60个。

详解Python如何批量采集京东商品数据流程

所以我们把剩下的复制过来, 用lis接收一下 。

lis = driver.find_elements_by_css_selector("#J_goodsList ul li")

因为我们是获取所有的标签数据,所以比之前多了一个s

详解Python如何批量采集京东商品数据流程

打印一下

print(lis)

通过lis返回数据 列表 [] 列表里面的元素 <> 对象

详解Python如何批量采集京东商品数据流程

遍历一下,把所有的元素拿出来。

for li in lis:

 # 商品标题 获取标签文本数据
    price = li.find_element_by_css_selector(".p-price strong i").text  # 价格
    commit = li.find_element_by_css_selector(".p-commit strong a").text  # 评论量
    shop_name = li.find_element_by_css_selector(".J_im_icon a").text  # 店铺名字
    href = li.find_element_by_css_selector(".p-img a").get_attribute("href")  # 商品详情页
    icons = li.find_elements_by_css_selector(".p-icons i")
    icon = ",".join([i.text for i in icons])  # 列表推导式  ",".join 以逗号把列表中的元素拼接成一个字符串数据
    dit = {
        "商品标题": title,
        "商品价格": price,
        "评论量": commit,
        "店铺名字": shop_name,
        "标签": icon,
        "商品详情页": href,
    }
    csv_writer.writerow(dit)
    print(title, price, commit, href, icon, sep=" | ")

搜索功能

key_world = input("请输入你想要获取商品数据: ")

详解Python如何批量采集京东商品数据流程

要获取的数据 ,获取到后保存CSV

f = open(f"京东{key_world}商品数据.csv", mode="a", encoding="utf-8", newline="")
csv_writer = csv.DictWriter(f, fieldnames=[
    "商品标题",
    "商品价格",
    "评论量",
    "店铺名字",
    "标签",
    "商品详情页",
])
csv_writer.writeheader()

然后再写一个自动翻页

for page in range(1, 11):
    print(f"正在爬取第{page}页的数据内容")
    time.sleep(1)
    drop_down()
    get_shop_info()  # 下载数据
    driver.find_element_by_css_selector(".pn-next").click()  # 点击下一页

 

完整代码

from selenium import webdriver
import time
import csv


def drop_down():
    """执行页面滚动的操作"""  
    for x in range(1, 12, 2):  
        time.sleep(1)
        j = x / 9  # 1/9  3/9  5/9  9/9
        # document.documentElement.scrollTop  指定滚动条的位置
        # document.documentElement.scrollHeight 获取浏览器页面的最大高度
        js = "document.documentElement.scrollTop = document.documentElement.scrollHeight * %f" % j
        driver.execute_script(js)  # 执行JS代码


key_world = input("请输入你想要获取商品数据: ")

f = open(f"京东{key_world}商品数据.csv", mode="a", encoding="utf-8", newline="")
csv_writer = csv.DictWriter(f, fieldnames=[
    "商品标题",
    "商品价格",
    "评论量",
    "店铺名字",
    "标签",
    "商品详情页",
])
csv_writer.writeheader()

# 实例化一个浏览器对象

driver = webdriver.Chrome()
driver.get("https://www.jd.com/")  # 访问一个网址 打开浏览器 打开网址
# 通过css语法在element(元素面板)里面查找 #key 某个标签数据 输入一个关键词 口红
driver.find_element_by_css_selector("#key").send_keys(key_world)  # 找到输入框标签
driver.find_element_by_css_selector(".button").click()  # 找到搜索按钮 进行点击
# time.sleep(10) # 等待 
# driver.implicitly_wait(10)  # 隐式等待 

def get_shop_info():
    # 第一步 获取所有的li标签内容
    driver.implicitly_wait(10)
    lis = driver.find_elements_by_css_selector("#J_goodsList ul li")  # 获取多个标签
    # 返回数据 列表 [] 列表里面的元素 <> 对象
    # print(len(lis))
    for li in lis:

 # 商品标题 获取标签文本数据
        price = li.find_element_by_css_selector(".p-price strong i").text  # 价格
        commit = li.find_element_by_css_selector(".p-commit strong a").text  # 评论量
        shop_name = li.find_element_by_css_selector(".J_im_icon a").text  # 店铺名字
        href = li.find_element_by_css_selector(".p-img a").get_attribute("href")  # 商品详情页
        icons = li.find_elements_by_css_selector(".p-icons i")
        icon = ",".join([i.text for i in icons])  # 列表推导式  ",".join 以逗号把列表中的元素拼接成一个字符串数据
        dit = {
            "商品标题": title,
            "商品价格": price,
            "评论量": commit,
            "店铺名字": shop_name,
            "标签": icon,
            "商品详情页": href,
        }
        csv_writer.writerow(dit)
        print(title, price, commit, href, icon, sep=" | ")
        # print(href)


for page in range(1, 11):
    print(f"正在爬取第{page}页的数据内容")
    time.sleep(1)
    drop_down()
    get_shop_info()  # 下载数据
    driver.find_element_by_css_selector(".pn-next").click()  # 点击下一页

driver.quit()  # 关闭浏览器

 

效果展示

详解Python如何批量采集京东商品数据流程

详解Python如何批量采集京东商品数据流程

代码是没得问题的,大家可以去试试

到此这篇关于详解Python如何批量采集京东商品数据流程的文章就介绍到这了,更多相关Python 采集京东商品数据内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/ooowwq/article/details/122435249

延伸 · 阅读

精彩推荐
  • Pythonpython使用pywinauto驱动微信客户端实现公众号爬虫

    python使用pywinauto驱动微信客户端实现公众号爬虫

    这个项目是通过pywinauto控制windows(win10)上的微信PC客户端来实现公众号文章的抓取。代码分成server和client两部分。server接收client抓取的微信公众号文章,并且...

    李理5522021-11-07
  • Pythonpython语言开发垃圾回收机制原理教程

    python语言开发垃圾回收机制原理教程

    这篇文章主要为大家介绍了python语言开发垃圾回收机制原理的教程有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    FikL-09-1910282022-02-22
  • Pythonpython登录并爬取淘宝信息代码示例

    python登录并爬取淘宝信息代码示例

    这篇文章主要介绍了python 登录并爬取淘宝信息代码示例,具有一定借鉴价值,需要的朋友可以了解下。...

    小奇葩6912020-12-23
  • Pythonpython删除列表内容

    python删除列表内容

    这里给大家通过2个例子,分析了下如何使用python删除列表内容,也给出了思路,分别通过pop和remove方法来实现,有相关需求的小伙伴可以参考下。...

    Python教程网2852020-07-28
  • PythonFlask实现异步执行任务

    Flask实现异步执行任务

    在一些开发中,可能会遇到需要长时间处理的任务,此时就需要使用异步的方式来实现,本文就介绍了Flask实现异步执行任务的方法,感兴趣的可以了解一...

    千锋python和唐唐9932021-11-01
  • Pythonuwsgi启动django项目的实现步骤

    uwsgi启动django项目的实现步骤

    本文主要介绍了uwsgi启动django项目的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    空中追风sk10512022-08-11
  • PythonPycharm连接远程服务器并实现远程调试的实现

    Pycharm连接远程服务器并实现远程调试的实现

    这篇文章主要介绍了Pycharm连接远程服务器并实现远程调试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    Lin_Danny6202021-12-22
  • Pythonpython如何通过protobuf实现rpc

    python如何通过protobuf实现rpc

    这篇文章主要为大家详细介绍了python通过protobuf实现rpc的方法,感兴趣的朋友可以参考一下...

    在于思考3822020-08-15