2019-05-21--重学Python36--京东店铺热销产品排行榜--成功

1,用的是selenium和js代码,必须得安装chorme等环境配置一下才能使用。
2,其次,只需要店铺内任意一个产品链接,就能得到其店铺热销产品top6。

from selenium import webdriver
import time

from bs4 import BeautifulSoup

import urllib.request



'''
url = https://search.jd.com/Search?keyword=%E6%A0%BC%E5%8A%9B%E7%A9%BA%E8%B0%83&enc=utf-8
1,我想用显示等待的方法,来暂停。结果京东页面真是恶心。鼠标翻到最底页的时候才会显示出来,用的是js调控网页行为的。

以至于,我必须得用EC.visibility_of_element_located。而不是presence_of_all_elements_located
前者意思是:# 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator
后者:# 判断所有元素是否加载完成

'''





class JdSpider(object):
    driver_path = "D:\chromedriver_win32\chromedriver.exe"


    def __init__(self):
        self.driver = webdriver.Chrome(executable_path=JdSpider.driver_path)
        self.keywords = "鸽子粮"
        word = url_code_name = urllib.request.quote(self.keywords)
        self.url = "https://search.jd.com/Search?keyword="+word+"&enc=utf-8"
        self.url2 = "https://item.jd.com/17033085487.html"



    def run(self):
        self.get_gmv(self.url2)


    def get_all_lists(self,url):
        #运行爬虫,采集搜索结果页所有的产品数据
        pass

    def get_gmv(self,url):
        #得到该店铺内-左侧商品销量数据
        self.driver.get(url)
        time.sleep(3)
        
        #自动挑动滚轮到适当位置,让目标数据加载进网页。
        jsCode = "var q=document.documentElement.scrollTop=2300"  #数值修改成2300像素正好,然后延时等待两秒,就能加载数据。
        self.driver.execute_script(jsCode)
        print("拖动滑动条到底部...")
        time.sleep(3)
        source = self.driver.page_source  # 获取当前页面的源代码。包含我们想要的详细信息--彩票相关信息
        soup = BeautifulSoup(source, 'lxml')

        shop_names = soup.select("#crumb-wrap > div > div.contact.fr.clearfix > div.J-hove-wrap.EDropdown.fr > div:nth-child(1) > div > a")
        xiaoliangs = soup.select("div.p-info.clearfix > div.p-count.fl > em")
        prices = soup.select("div.p-info.clearfix > div.p-price.fr > strong")
        titles= soup.select("div.p-img.ac > a > img")  # i.get("alt") 获取商品标题
        urls = soup.select("div.p-img.ac > a") #获取对应商品的url  //item.jd.com/17073824364.html

        for xiaoliang,price,title,url in zip(xiaoliangs,prices,titles,urls):
            data = {
                "店铺名称":shop_names[0].get("title"),
                "销量":xiaoliang.text,
                "价格":price.text,
                "产品标题":title.get("alt"),
                "产品链接":"http:"+url.get("href")
            }
            print(data)

        # print(urls)
        # for i in urls:
        #     print(i.get("href"))





if __name__ == "__main__":
    spider = JdSpider()
    spider.run()

你可能感兴趣的:(2019-05-21--重学Python36--京东店铺热销产品排行榜--成功)