使用selenium获取京东商品信息

简单说明

使用selenium实现京东商城的商品查找,同时获取每个商品的价格、评论、店铺名称、详情链接、图片链接、标题信息,存入Mongodb数据库当中,以口红为例子。

使用工具和模块安装

  1. selenium: pip install selenium -i https://pypi.douban.com/simple
  2. lxml: pip install lxml -i https://pypi.douban.com/simple
  3. pymongo: pip install pymongo -i https://pypi.douban.com/simple
  4. time
  5. 谷歌驱动要下载自己电脑上相匹配的驱动器
  6. Mongodb数据库安装-----不细讲
    下载模块时,最好加上镜像源。

实现步骤分析

  1. 使用selenium模拟登录京东界面,输入关键次,跳转到相应商品页面。
    在这里插入图片描述
  2. 获取网页源代码,对页面进行解析,使用lxml,输出结果如下:
    在这里插入图片描述
  3. 想要获取多页的数据,这里定义p和page(想要获取的页数,不超过最大页数)进行比较来实现,同时还要实现自动点击下一页的功能。
  4. 将结果保存到Mongodb数据库中

相关代码

#爬取京东口红店铺数据
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from time import sleep
from lxml import etree
from pymongo import MongoClient

class JdKouHong:
   def __init__(self):
       self.url = 'https://www.jd.com/'
       self.p=1
       self.page=0

   #打开界面
   def open_html(self):
       self.driver=webdriver.Chrome()
       self.driver.get(self.url)
       #停顿
       self.wait = WebDriverWait(self.driver, 10)

   #滑动
   def main(self,key):
       self.wait.until(EC.presence_of_element_located((By.ID, 'key'))).send_keys(key)
       self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'button'))).click()
       #    all_count= browser.find_element_by_xpath('//span[@class="p-skip"]/em/b').text#找到当前商品的最大页数
       #    print('一共有{}页'.format(all_count))
       # 输入想要获取到的页数,不超过最大页码数
       self.page = eval(input('输入页码:'))
       self.roll()

   #页面下拉
   def roll(self):
       # 滚动 0 表示页顶 10000表示页底,执行js代码,同时设置一定的停顿时间
       js = "var q=document.documentElement.scrollTop=5000"
       self.driver.execute_script(js)
       sleep(3)
       js2 = "var q=document.documentElement.scrollTop=10000"
       self.driver.execute_script(js2)
       sleep(8)
       self.html =self.driver.page_source  # 获取源网页代码
       #对源代码进行解析
       self.get_content(self.html)
       sleep(2)

   #想要获取多少页进行判断
   def clik(self):
       if self.p < self.page:
           self.p += 1
           print("正在获取第%s页" % self.p)
           self.next_page()

   #解析源代码
   def get_content(self,htmll):
   # 解析源代码(获取价格、评论、店铺名称、详情链接、图片链接、标题)
       self.save_data=[]
       htmll = etree.HTML(htmll)  #
       source = htmll.xpath('//div[@class="gl-i-wrap"]')
       # 循环每一个li标签,获取值
       for i in range(len(source)):
           D = {}
           D['价格'] = htmll.xpath('//div[@class="p-price"]/strong/i/text()')[i]
           # 获取评论数量
           D['评论'] = htmll.xpath('//div[@class="p-commit"]/strong/a/text()')[i]
           # 获取店铺名称
           try:
               shop = htmll.xpath('//div[@class="p-shop"]/span/a/text()')[i]
               D['店铺名称'] = shop
           except:
               D['店铺名称'] = 'None'

           # 获取详情页链接
           D['详情链接'] = 'https:' + htmll.xpath('//div[@class="p-commit"]/strong/a')[i].get('href')
           # 获取标题
           D['标题'] = htmll.xpath('//div[@class="p-name p-name-type-2"]/a/em')[i].xpath('string(.)').strip()
           # 获取图片链接(观察获取到源代码,与网页中源代码有区别,进行判断)
           image_url = htmll.xpath('div[@class="p-img"]/a/img')[i].get('data-lazy-img')
           if image_url == 'done':
               image_urll = 'https:' + htmll.xpath('//div[@class="p-img"]/a/img')[i].get('src')
               D['图片链接'] = image_urll
           else:
               D['图片链接'] = 'https:' + image_url
           print(D)
           self.save_data.append(D)
           # print('页面总数为为:{}'.format(len(self.save_data)))
       self.save_db()
       self.clik()


   # 保存数据到数据库当中
   def save_db(self):
       # 连接数据库
       client = MongoClient()
       # 创建数据库
       database = client['kouhong']
       # 创建集合
       db = database['shop']
       db.insert_many(self.save_data)


   # 设置翻页动作,重复操作
   def next_page(self):
       self.driver.find_element(By.XPATH,'//*[@id="J_bottomPage"]/span[1]/a[9]').click()  # 获取下一页按钮并点击
       sleep(4)
       self.roll()

# keys = input("请输入商品:")
# main(keys)
if __name__=='__main__':
   mql=JdKouHong()
   mql.open_html()
   #t填入关键词
   mql.main('口红')

结果截图

在这里插入图片描述

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能变瘦的莫巧丽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值