获取淘宝价格区间l-r的商品a的详细信息(商品名等)

Posted yeah17981

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取淘宝价格区间l-r的商品a的详细信息(商品名等)相关的知识,希望对你有一定的参考价值。

看了一眼,上次更新距今2个月,看起来我好咕咕啊(感叹),可是感觉这两个月也没闲着捏(比赛,cf,期末等等,幸亏期末考延期了,我这被期末作业都整死了快),只是懒得更博客而言(逃跑),本来打算把整理完的spss小测知识点发上来,但是操作部分没整理,就爬了(而且懒得截图)

不更题解大概是因为那段时间和学弟一起刷题,回答问题当作写题解了。

and明明已经在家一个月了,ip地址还在广东哈哈哈哈,侧面证明我是老鸽子。

别问比赛,问就是翻车。

感觉接下来能更新的东西也挺多的,再说吧(准备面实习了)。


这是本学期数据挖掘的期末大作业,作业要求上写不允许全程抄网上或其他同学的代码,以防误伤到我自己,先叠一层buff,截个图证明一下自己(防止有异议,发布博客之后就不改了)

第二层buff:文章的标题没有写很得详细(如果有幸被同学刷到那跟我没关啊)

第三层buff:会省略一些细节类的东西,大家加油!(不过我觉得应该没啥人会选这个题目,因为后面两个可以直接在上次小测的代码改,比这轻松多了,话说回来要是没事干我也可以把后面两个写了23333)


回归正题,这个大作业的要求是“淘宝(https://www.taobao.com/)上搜索a,价格区间l-r,抓取前k页的商品名、商品链接、价格、付款人数、商家名、商家链接总共6项信息(输出为excel文件)

第一个要求,在淘宝上搜索a物品,并遍历前k页。按理来说,这种事情可以直接通过找链接的规律来进行,不过老师要求了用selenium来处理,那就用吧

不过有一个问题是:淘宝搜索需要登陆,而selenium生成的浏览器可是啥都没有滴。

我这里使用了调用本地的登陆信息来处理

selenium的精髓就在于找到元素位置,直接模拟

具体的看注释(QAQ我老想打成//,老acmer了)

option = webdriver.ChromeOptions()#实例化谷歌设置选项
option.add_argument(r"user-data-dir=C:\\Users\\xxx\\AppData\\Local\\Google\\Chrome\\User Data")#本地的chrome登陆信息,添加保持登录的数据路径
driver = webdriver.Chrome(options=option)#初始化driver
driver.get("https://www.taobao.com/")#打开淘宝
driver.find_element(By.XPATH, '//*[@id="q"]').clear()#清除
driver.find_element(By.XPATH, '//*[@id="q"]').send_keys("a")#输入a
driver.find_element(By.XPATH, '//*[@id="J_TSearchForm"]/div[1]/button').click()#点击搜索

下一步,我们要设置价格区间

driver.find_element(By.XPATH, '//*[@id="J_relative"]/div[1]/div/div[1]/div[1]/div/ul/li[1]/input').send_keys("l")#最小价格
driver.find_element(By.XPATH, '//*[@id="J_relative"]/div[1]/div/div[1]/div[1]/div/ul/li[3]/input').send_keys("r")#最大价格
driver.find_element(By.XPATH, '//*[@id="J_relative"]/div[1]/div/div[1]/div[1]/div/ul/li[4]/button').click()#点击确认

接下来,就是要枚举每一页,因为如果翻页的话中间出bug了后面就无了,所以还是用输入页码的方式比较保险

更保险的方法应该是写个try跳过bug,但我懒,就不写了

啊,注释太详细搞得我现在没话说,想整活

插播一段小故事:这两天在写作业(不止这门),我妈疑惑的问我:你在写专业作业还是写辅修的?我:专业课作业QAQ

谁能想到一个文科生天天在写代码捏

for i in range(1,k+1):#页码
    driver.find_element(By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]/input').clear()
    driver.find_element(By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]/input').send_keys("".format(i))#输入页码
    driver.find_element(By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]/span[3]').click()#点击确认
    print("正在爬取第页".format(i))

接下来,我们已经到了我们要的页面,那么我们就该找找我们需要的这些信息的位置啦(顺带一提,我的python码风神似c++,改不了啦)

这里辨析一下find_elements和find_element这两个函数,由于我前面设置本地登陆信息的时候得更新到最新版,所以find_elements_by_xpath这种就不能用了。然后没加s的返回第一个符合条件的元素,加了s的返回所有符合条件的元素的集合

    list=driver.find_elements(By.XPATH, '//*[@class="price g_price g_price-highlight"]/strong')
    for j in list:
        list_price.append(j.text)
    #//*[@class="deal-cnt"] 人数
    list=driver.find_elements(By.XPATH, '//*[@class="deal-cnt"]')
    for j in list:
        list_number.append(j.text)
    #//*[@class="row row-2 title"] 商品名
    list=driver.find_elements(By.XPATH, '//*[@class="row row-2 title"]')
    for j in list:
        list_goods.append(j.text)
    #//*[@class="row row-2 title"] 链接
    list=driver.find_elements(By.XPATH, '//*[@class="row row-2 title"]/a')
    for j in list:
        a = j.get_attribute('href')
        list_goods_link.append(a)
    #//*[@class="shop"]/a/span[2] 店名
    list=driver.find_elements(By.XPATH, '//*[@class="shop"]/a/span[2]')
    for j in list:
        list_shop.append(j.text)
    #//*[@class="shop"]/a 链接
    list=driver.find_elements(By.XPATH, '//*[@class="shop"]/a')
    for j in list:
        a = j.get_attribute('href')
        list_shop_link.append(a)

说到集合,因为每个页面的每种信息都是以集合的形式存在,我就维护了一个大的集合,每个集合是表格中的一列,最后出结果的时候直接用pandas来输出excel

list_goods=[]#商品名
list_goods_link=[]#商品链接
list_price=[]#价格
list_number=[]#付款人数
list_shop=[]#商品名
list_shop_link=[]#商家链接
data = "商品名":list_goods,"商品链接":list_goods_link,"价格":list_price,"付款人数":list_number,"商家名":list_shop,"商家链接":list_shop_link
df = pd.DataFrame(data)
df.to_excel('new.xlsx')

好啦,结束啦,睡觉

以上是关于获取淘宝价格区间l-r的商品a的详细信息(商品名等)的主要内容,如果未能解决你的问题,请参考以下文章

利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程

淘宝商品定向爬取

使用python爬取淘宝商品名称和价格

表哥用Python爬取数千条淘宝商品数据后,发现淘宝这些潜规则!

Python 爬取淘宝商品信息和相应价格

Python-使用requests库和正则表达式爬取淘宝商品信息