selenium爬取京东商品

文章目录

  • step1:导入必要的包
  • step2:模拟浏览器,打开京东首页
  • step3:跳转到指定商品页面
  • step4:捕获一个商品的信息
  • step5:捕获所有页面中所有商品的信息
  • step6:将爬取到的数据存储到excel中

step1:导入必要的包

from selenium import webdriver
import time
import pandas as pd

step2:模拟浏览器,打开京东首页

url = 'https://www.jd.com/'
browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
browser.get(url)

step3:跳转到指定商品页面

#找到页面中的搜索框,然后输入想找的商品
browser.find_element_by_xpath('//*[@id="key"]').send_keys('蔚县小米')	

#找到页面中的搜索键,然后执行click操作
browser.find_element_by_xpath('//*[@id="search"]/div/div[2]/button/i').click()

'''
模拟页面下拉
为什么要模拟页面下拉?
如果不下来,在源码中只会显示30个商品,
下拉之后,会显示60个商品
'''
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)') 
time.sleep(5)

step4:捕获一个商品的信息

#拿到该页面的所有商品
products = browser.find_elements_by_xpath('//li[@class="gl-item"]') 
print(len(products)) #60

#捕获商品价格
price = products[0].find_element_by_xpath('.//div[@class="p-price"]//i').text

#捕获商品名称
name = products[0].find_element_by_xpath('.//div[@class="p-name p-name-type-2"]//em').text

#捕获商品评论数
commit = products[0].find_element_by_xpath('.//div[@class="p-commit"]').text[:-3]

#捕获店铺名称
shop_name = products[0].find_element_by_xpath('.//div[@class="p-shop"]').text

#捕获商品详情链接
link = products[0].find_element_by_xpath('.//div[@class="p-name p-name-type-2"]/a').get_attribute('href')

step5:捕获所有页面中所有商品的信息

重难点:
1.如何判断该页面之后是否还有下一页?
2.如果有下一页,如何进行翻页?
首先,我们来看第一页:
selenium爬取京东商品_第1张图片
按照图中1、2步操作后,可以看到源码中的3,即‘下一页’所在的em标签的上一级a标签的class是‘pn-next’
然后我们可以发现,第2页、第3页也是同样的情况。那现在我们看看最后一页:
selenium爬取京东商品_第2张图片
我们可以看到,最后一页,‘下一页’所在的em标签的上一级a标签的class是‘pn-next disabled’。也就是说,只有最后一页是‘pn-next disabled’,其他页面都是‘pn-next’,因此我们可以根据该特性来判断当前所在页面是否有下一页。
如果该页面有下一页,则使用browser.find_element_by_class_name(‘pn-next’)找到指定节点(其实就是刚刚那个a标签所在的节点),然后执行click操作就可以实现翻页了。

price = []
name = []
commit = []
shop_name = []
link = []
while browser.page_source.find('pn-next disabled')==-1 :
    #上一行代码的意思是:如果在该页面的源码中没有‘pn-next disabled’,则进行下面的循环
    #如果有‘pn-next disabled’,则说明该页面之后,没有下一页了,则不进行下面的循环
    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    time.sleep(5)
    products = browser.find_elements_by_xpath('//li[@class="gl-item"]')
    print(len(products))
    for i in range(len(products)):
        price.append(products[i].find_element_by_xpath('.//div[@class="p-price"]//i').text)
        name.append(products[i].find_element_by_xpath('.//div[@class="p-name p-name-type-2"]//em').text)
        commit.append(products[i].find_element_by_xpath('.//div[@class="p-commit"]').text[:-3])
        shop_name.append(products[i].find_element_by_xpath('.//div[@class="p-shop"]').text)
        link.append(products[i].find_element_by_xpath('.//div[@class="p-name p-name-type-2"]/a').get_attribute('href'))
    browser.find_element_by_class_name('pn-next').click()
    #找到‘下一页’按钮的位置,并执行click操作
60
60
60
60
60
60
60

step6:将爬取到的数据存储到excel中

data = pd.DataFrame([name,price,commit,shop_name,link]).T

data.columns=['name','price','commit','shop_name','link']

data.to_excel('spider_jd.xls',index=False)

selenium爬取京东商品_第3张图片

你可能感兴趣的:(爬虫)