欢迎光临散文网 会员登陆 & 注册

京东淘宝商品信息爬虫(python和selenium库)

2023-07-12 14:08 作者:昀匪嗳卿  | 我要投稿

(一)网站HTML元素分析

京东网的搜索不需要登录,淘宝网需要,本实验代码选择京东网,搜索“肉”后搜索结果中一个商品的源代码如下


目标数据在class=gl-item下

(二)使用浏览器实例登录并爬取商品数据

使用Selenium和WebDriver驱动程序自动登录京东商城,搜索指定的商品,并将商品的标题、价格、链接和评论量保存

导入库

import csv

from time import sleep

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

创建WebDriver实例,选择适合的浏览器驱动程序,例如webdriver.Edge()用于Edge浏览器。

driver = webdriver.Edge()# 设置引擎为Edge,真实地打开一个Edge浏览器

打开京东商城网址,并使用driver.find_element()方法定位到搜索框,并输入待搜索的商品名称,这回选择“书包“,如果是淘宝网这一步回车后需要扫码登录

url = 'https://www.jd.com/'

driver.get(url)

want = input('请输入需要查询的商品\n')

input_search = driver.find_element(By.ID,'key')# 通过id=key定位到搜索框

# 在输入框中输入“书包”

input_search.send_keys(want)

# 模拟键盘回车Enter操作进行搜索,

input_search.send_keys(Keys.ENTER)

使用time.sleep()进行强制等待,确保页面内容加载完全。

sleep(3)

使用driver.find_elements()方法定位到商品列表,并依次提取商品的链接、标题名称、价格和评价数量,保存到字典中。

data=[]

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

    good_data = {

            '商品标题':title,

            '商品价格':price,

            '商品链接':link,

            '评论量':commit

        }

    data.append(good_data)

(三)数据保存为文件

创建CSV文件,实现数据的持久化。

file = path.join('good.csv')

# 以追加写入的方式将商品数据保存到文件中

header = ['商品标题', '商品价格', '商品链接', '评论量']

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()方法关闭浏览器。

driver.quit()

实验结果(csv文件截图):

good.csv

完整代码如下:

import csv

from time import sleep

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

from os import path

# 京东商城网址

url = 'https://www.jd.com/'

want = input('请输入需要查询的商品\n')

driver = webdriver.Edge()# 设置引擎为Chrome,真实地打开一个Chrome浏览器

driver.get(url)

driver.implicitly_wait(3)# 隐式等待,确保动态内容节点被完全加载出来——时间感受不到

#driver.maximize_window()# 最大化浏览器窗口,主要是防止内容被遮挡

input_search = driver.find_element(By.ID,'key')# 通过id=key定位到搜索框

# 在输入框中输入“口罩”

input_search.send_keys(want)

# 模拟键盘回车Enter操作进行搜索

input_search.send_keys(Keys.ENTER)

# 强制等待3秒

sleep(3)

data=[]

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

    good_data = {

            '商品标题':title,

            '商品价格':price,

            '商品链接':link,

            '评论量':commit

        }

    data.append(good_data)

file = path.join('good.csv')

# 以追加写入的方式将商品数据保存到文件中

header = ['商品标题', '商品价格', '商品链接', '评论量']

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()

如果要爬取淘宝网则需重新分析网页,请参照上述代码补全,示例如下:

import requests

from bs4 import BeautifulSoup

import time

import re

from selenium import webdriver

from selenium.webdriver.common.by import By

# 京东商城网址

url = 'https://www.jd.com/'

want = input('请输入需要查询的商品\n')

driver = webdriver.Edge()

# 设置引擎为Chrome,真实地打开一个Chrome浏览器

driver.get('https://www.taobao.com/')

# 隐式等待,确保动态内容节点被完全加载出来——时间感受不到

driver.implicitly_wait(3)

# 最大化浏览器窗口,主要是防止内容被遮挡

driver.maximize_window()

time.sleep(2)

# 等待网页加载

driver.find_element(By.ID,'q').send_keys(want)    

#找到搜索框标签,传入需要查询的内容

driver.find_element(By.CLASS_NAME,'tb-bg').click()  

#点击搜索按钮



京东淘宝商品信息爬虫(python和selenium库)的评论 (共 条)

分享到微博请遵守国家法律