栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬虫动态爬取京东商品的数据

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫动态爬取京东商品的数据

动态爬取京东
    • 导入包
    • 对Dataframe处理
    • 评论处理
    • 查询的网页
    • 爬取过程
    • 关闭浏览器

导入包
from time import sleep

from selenium import webdriver
import pandas as pd
from urllib.parse import quote
import re
from datetime import datetime
对Dataframe处理
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 150)
评论处理

如果含有“万”,则进行分割处理,将评论转化为int类型

def com_count(text):
    if '万' in text:
        num = float(text.split('万')[0])
        return int(num * 10000)
    else:
        return int(re.match('d+', text).group())

浏览器初始化

driver = webdriver.Chrome()  # 打开浏览器
driver.maximize_window()  # 最大化窗口
查询的网页
key = '红酒'  # 设置搜索商品关键词
url = 'https://search.jd.com/Search?keyword=' + quote(key) + '&enc=utf-8'  # 构造url
driver.get(url)  # 打开url
driver.implicitly_wait(3)  # 等待
爬取过程

  分析过程如下:根据xpath进行定位分析,首先是找到价格的xpath,然后提取数据,对于商品名称,提取之后根据换行进行分割,然后保存, 然后就是分别找到商品的链接和编号,根据for遍历先储存商品名称和价格,评论的话就是调用上面的评论修正函数最有就是把数据进行保存,保存之后就进行翻页,继续爬取下一页的数据

def page_crawl(results):
    res = pd.Series()  # 记录单条商品信息
    prices = driver.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[2]/strong/i')
    prices = [float(price.text) for price in prices]
    goods = driver.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[3]/a/em')
    goods = [good.text.replace('n', '') for good in goods]
    links = driver.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[3]/a')  # 查找当前页面的商品链接
    urls = [l.get_attribute('href') for l in links]
    codes = [re.search('d+', url).group() for url in urls]

    for ii in range(len(prices)):
        # print(len(prices))
        res.name = codes[ii]  # 这个name是Series的名字
        res['good_name'] = goods[ii]
        res['good_price'] = prices[ii]

        # 评论数的抽取稍微复杂一些
        # 1、他的xpath不再是排序的,而是J_comment_商品编号
        # 2、有的单位是条,有单位是万条
        com = driver.find_elements_by_xpath('//*[@id="J_comment_{}"]'.format(codes[ii]))
        # print(com)
        res['com_count'] = com_count(com[0].text)  # 调用上面的万条评论的修正的函数
        print(res['com_count'])

        results = results.append(res)  # 各商品记录
    # 翻页
    cl = driver.find_elements_by_xpath('//*[@id="J_bottomPage"]/span[1]/a[9]')
    cl[0].click()  # 点击“下一页”
    sleep(5)  # 等待
    return results

results = pd.Dataframe()
关闭浏览器
for ii in range(5):
    print(datetime.now(), ii)
    results = page_crawl(results)

driver.close()

本文和爬取苏宁的代码相似,如有不明白的请看爬取苏宁这个文章

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号