当前位置:   article > 正文

Python 手把手教你爬取淘宝的笔记本电脑数据_爬取淘宝网笔记本

爬取淘宝网笔记本

  如果觉得文章写得好,如果你想要获取本文的所有数据,请关注公众号:【数据分析与统计学之美】,添加作者【个人微信】,进群和作者交流!




目录

  1、selenium模块的安装与chromedriver驱动的配置
   1)安装selenium库
   2)chromedriver驱动的配置
     ① 检查谷歌浏览器的版本
     ② 下载chromedriver驱动
     ③ chromedriver驱动的配置
   3)检验selenium是否可用
   4)一个小案例展示selenium的操作效果
  2、爬虫思路的完整叙述
   1)定位输入框、搜索框
   2)获取“总页数”信息
   3)获取商品信息(第一页的信息)
   4)保存数据(第一页的数据)
   5)翻页操作获取整个数据(完整代码)
  3、可视化展示
   1)买电脑最关注哪些参数?
   2)不同电脑品牌的销量信息
   3)电脑需求量最大的前十个城市
   4)店铺销售量最好的前十个城市
   5)价格最贵的电脑到底是啥样的?


1、selenium模块的安装与chromedriver驱动的配置
1)安装selenium库

pip install selenium

检验是否安装成功:
在这里插入图片描述




2)chromedriver驱动的配置

配置chromedriver驱动,一定要注意“驱动”和“谷歌浏览器”版本一定是要相匹配,否则不能使用。
① 检查谷歌浏览器的版本

这里首先提供一个详细的地址供大家查看:
https://jingyan.baidu.com/article/95c9d20d74a1e8ec4f756149.html
点击“右上角三个点” --> 点击“设置” --> 点击 “关于chrome”,出现如下界面。
在这里插入图片描述




② 下载chromedriver驱动

这里再次提供一个详细的地址,供大家选择各种版本驱动程序:
http://chromedriver.storage.googleapis.com/index.html
从上面的图中可以看出,谷歌浏览器的版本是【81.0.4044.138】,这里我们选择的chromedriver驱动,如下图所示。
在这里插入图片描述
点进该文件后,可以根据我们的操作系统,选择对应的驱动。
在这里插入图片描述




③ chromedriver驱动的配置

解压上述下载好的文件,并将其中的的chromedriver.exe文件,需要放到python的安装路径下(和python.exe放在一起)。
首先,你可以查看你的python解释器安装在哪里!
在这里插入图片描述
然后,将chromedriver.exe放置和python.exe在一起。
在这里插入图片描述




3)检验selenium是否可用

使用如下两行代码,如果谷歌浏览器成功被驱动打开,证明上述安装和配置没问题。

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()

结果如下:
在这里插入图片描述


4)一个小案例展示selenium的操作效果

  1. from selenium import webdriver
  2. import time
  3. # 创建浏览器对象,该操作会自动帮我们打开Google浏览器窗口
  4. browser = webdriver.Chrome()
  5. # 调用浏览器对象,向服务器发送请求。该操作会打开Google浏览器,并跳转到“百度”首页
  6. browser.get("https://www.baidu.com/")
  7. # 最大化窗口
  8. browser.maximize_window()
  9. # 定位“抗击肺炎”链接内容
  10. element = browser.find_element_by_link_text("抗击肺炎")
  11. # 为了更好的展示这个效果,我们等待3秒钟
  12. time.sleep(3)
  13. # 点击上述链接
  14. element.click()
  15. # 我们再让浏览器停留3秒钟后,再关闭浏览器
  16. time.sleep(3)
  17. # 操作会自动关闭浏览器
  18. browser.close()
  19. """
  20. 效果这里就不展示了,大家自行下去尝试!
  21. """




2、爬虫思路的完整叙述

这个章节主要讲述的是我的整个爬虫思路。会的人就挑重点看看,不会的人就仔细看看。
1)定位输入框、搜索框

你想要获取笔记本电脑的数据信息。就必须要利用selenium自动化测试工具,自动输入“笔记本电脑”,然后点击“搜索”,获取我们想要的页面。
下图展示的是“输入框”的定位信息:
在这里插入图片描述
下图展示的是“搜索框”的定位信息:
在这里插入图片描述
第一次测试代码如下:

  1. from selenium import webdriver
  2. import time
  3. # 搜索商品
  4. def search_product(key_word):
  5. # 定位输入框
  6. browser.find_element_by_id("q").send_keys(key_word)
  7. # 定义点击按钮,并点击
  8. browser.find_element_by_class_name('btn-search').click()
  9. # 最大化窗口:为了方便我们扫码
  10. browser.maximize_window()
  11. # 等待15秒,给足时间我们扫码
  12. time.sleep(15)
  13. # 获取数据
  14. def get_data():
  15. pass
  16. def main():
  17. browser.get('https://www.taobao.com/')
  18. search_product(key_word)
  19. if __name__ == '__main__':
  20. key_word = input("请输入你要搜索的商品:")
  21. browser = webdriver.Chrome()
  22. main()

注意:在自动点击“搜索框”后,系统会提示“需要登陆信息”。登陆方式很多,我推荐的是使用“二维码登录”的方式,因为其他方式很复杂,也不建议你们尝试,除非你想研究爬虫。


2)获取“总页数”信息

这个操作是为我们后来的“翻页”操作做准备的。对于淘宝页面来说,进行翻页操作,有如下两种方式,下面我们一一进行说明,我们先看下图。
在这里插入图片描述
思路一:从第一页开始,一直点击下一页;
思路二:获取总页码,进行url的拼接后,进行翻页操作;
这里我们选择的是“第二种思路”。因为不同的商品页码不同(有的可能没有100页),因此为了便于代码的书写,我们选择了第二种。

  1. from selenium import webdriver
  2. import time
  3. # 搜索商品,获取商品页码
  4. def search_product(key_word):
  5. # 定位输入框
  6. browser.find_element_by_id("q").send_keys(key_word)
  7. # 定义点击按钮,并点击
  8. browser.find_element_by_class_name('btn-search').click()
  9. # 最大化窗口:为了方便我们扫码
  10. browser.maximize_window()
  11. # 等待15秒,给足时间我们扫码
  12. time.sleep(15)
  13. # 定位这个“页码”,获取“共100页这个文本”
  14. page_info = browser.find_element_by_xpath('//div[@class="total"]').text
  15. # 需要注意的是:findall()返回的是一个列表,虽然此时只有一个元素它也是一个列表。
  16. page = re.findall("(\d+)",page_info)[0]
  17. return page
  18. # 获取数据
  19. def get_data():
  20. pass
  21. def main():
  22. browser.get('https://www.taobao.com/')
  23. page = search_product(key_word)
  24. print(type(page))
  25. print(page)
  26. if __name__ == '__main__':
  27. key_word = input("请输入你要搜索的商品:")
  28. browser = webdriver.Chrome()
  29. main()

定位“总页面”,我们可以看一下图中的定位信息,这里的总页面信息是一个文本“共100页”,我们需要利用“正则表达式”提取数字100,代码如上。
在这里插入图片描述


3)获取商品信息(第一页的信息)

我们要获取商品信息,首先要找到商品信息的具体定位信息。老生常谈的话,怎么定位?这里就不详细说明了,下图中可以看出:整个笔记本的信息都存在于div[@class=“items”]下。
其次,获取具体各部分的信息,我们使用的是xpath语法,这一直是我最喜欢使用的一个获取数据的方式。
在这里插入图片描述
代码如下:

  1. from selenium import webdriver
  2. import time
  3. # 搜索商品,获取商品页码
  4. def search_product(key_word):
  5. # 定位输入框
  6. browser.find_element_by_id("q").send_keys(key_word)
  7. # 定义点击按钮,并点击
  8. browser.find_element_by_class_name('btn-search').click()
  9. # 最大化窗口:为了方便我们扫码
  10. browser.maximize_window()
  11. # 等待15秒,给足时间我们扫码
  12. time.sleep(15)
  13. # 定位这个“页码”,获取“共100页这个文本”
  14. page_info = browser.find_element_by_xpath('//div[@class="total"]').text
  15. # 需要注意的是:findall()返回的是一个列表,虽然此时只有一个元素它也是一个列表。
  16. page = re.findall("(\d+)",page_info)[0]
  17. return page
  18. # 获取数据
  19. def get_data():
  20. # 通过页面分析发现:所有的信息都在items节点下
  21. items = browser.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]')
  22. for item in items:
  23. # 参数信息
  24. pro_desc = item.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
  25. # 价格
  26. pro_price = item.find_element_by_xpath('.//strong').text
  27. # 付款人数
  28. buy_num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text
  29. # 旗舰店
  30. shop = item.find_element_by_xpath('.//div[@class="shop"]/a').text
  31. # 发货地
  32. address = item.find_element_by_xpath('.//div[@class="location"]').text
  33. print(pro_desc, pro_price, buy_num, shop, address)
  34. def main():
  35. browser.get('https://www.taobao.com/')
  36. page = search_product(key_word)
  37. print(page)
  38. get_data()
  39. if __name__ == '__main__':
  40. key_word = input("请输入你要搜索的商品:")
  41. browser = webdriver.Chrome()
  42. main()




4)保存数据(第一页的数据)

保存数据我们使用的是csv模块,我们先保存第一页的数据,后面采用追加的方式,将每一页的数据,一次次保存进行。

  1. from selenium import webdriver
  2. import time
  3. import csv
  4. # 搜索商品,获取商品页码
  5. def search_product(key_word):
  6. # 定位输入框
  7. browser.find_element_by_id("q").send_keys(key_word)
  8. # 定义点击按钮,并点击
  9. browser.find_element_by_class_name('btn-search').click()
  10. # 最大化窗口:为了方便我们扫码
  11. browser.maximize_window()
  12. # 等待15秒,给足时间我们扫码
  13. time.sleep(15)
  14. # 定位这个“页码”,获取“共100页这个文本”
  15. page_info = browser.find_element_by_xpath('//div[@class="total"]').text
  16. # 需要注意的是:findall()返回的是一个列表,虽然此时只有一个元素它也是一个列表。
  17. page = re.findall("(\d+)",page_info)[0]
  18. return page
  19. # 获取数据
  20. def get_data():
  21. # 通过页面分析发现:所有的信息都在items节点下
  22. items = browser.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]')
  23. for item in items:
  24. # 参数信息
  25. pro_desc = item.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
  26. # 价格
  27. pro_price = item.find_element_by_xpath('.//strong').text
  28. # 付款人数
  29. buy_num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text
  30. # 旗舰店
  31. shop = item.find_element_by_xpath('.//div[@class="shop"]/a').text
  32. # 发货地
  33. address = item.find_element_by_xpath('.//div[@class="location"]').text
  34. #print(pro_desc, pro_price, buy_num, shop, address)
  35. with open('{}.csv'.format(key_word), mode='a', newline='', encoding='utf-8-sig') as f:
  36. csv_writer = csv.writer(f, delimiter=',')
  37. csv_writer.writerow([pro_desc, pro_price, buy_num, shop, address])
  38. def main():
  39. browser.get('https://www.taobao.com/')
  40. page = search_product(key_word)
  41. print(page)
  42. get_data()
  43. if __name__ == '__main__':
  44. key_word = input("请输入你要搜索的商品:")
  45. browser = webdriver.Chrome()
  46. main()

注意:在使用csv保存数据的时候,一定要将数据编码设置为“utf-8-sig”形式,不要问为什么,因为我以前碰到过保存为“utf8”格式,仍然出现乱码的情况。只有保存成这个编码还没有遇见任何问题。




5)翻页操作获取整个数据(完整代码)

我们想要知道怎么翻页,就必须了解每个页面的“url”是怎么变化的,下图我截取了第2,3,4页的url信息,进行分析。
在这里插入图片描述
由于整个代码太长,这里就不提供了,详细代码可以参见文末的“获取方式”。




3、可视化展示
1)买电脑最关注哪些参数?

  1. add_word = ['联想','惠普','酷睿','苹果','三星','华硕','索尼','宏碁','戴尔','海尔','长城','海尔','神舟','清华同方','方正','明基']
  2. for i in add_word:
  3. jieba.add_word(i)
  4. df["切分后的描述信息"] = df["描述信息"].apply(lambda x:jieba.lcut(x))
  5. # 读取停用词
  6. with open("stoplist.txt", encoding="utf8") as f:
  7. stop = f.read()
  8. stop = stop.split()
  9. stop = [" ","笔记本电脑"] + stop
  10. stop[:10]
  11. # 去掉停用词
  12. df["切分后的描述信息"] = df["切分后的描述信息"].apply(lambda x: [i for i in x if i not in stop])
  13. # 词频统计
  14. all_words = []
  15. for i in df["切分后的描述信息"]:
  16. for j in i:
  17. all_words.extend(i)
  18. word_count = pd.Series(all_words).value_counts()
  19. # 绘制词云图
  20. # 1、读取背景图片
  21. back_picture = imread("aixin.jpg")
  22. # 2、设置词云参数
  23. wc = WordCloud(font_path="G:\\6Tipdm\\wordcloud\\simhei.ttf",
  24. background_color="white",
  25. max_words=2000,
  26. mask=back_picture,
  27. max_font_size=200,
  28. random_state=42
  29. )
  30. wc2 = wc.fit_words(word_count)
  31. # 3、绘制词云图
  32. plt.figure(figsize=(16,8))
  33. plt.imshow(wc2)
  34. plt.axis("off")
  35. plt.show()
  36. wc.to_file("电脑.png")

效果如下:
在这里插入图片描述
从上图可以看出:“轻薄”、“游戏”、“学生”、“商务”这三个词被提及的次数最多。其次大家关注最多的是“办公”、“便携”、“英寸”。从电脑牌子可以看出 , “酷睿”和“联想”的销量最大,“华硕”的其次。从性能参数来看,“i7”牌子的电脑,销量高于“i5”牌子的电脑,想当年我买电脑的时候,还是“i5”刚刚普及的时候。


2)不同电脑品牌的销量信息

在这里插入图片描述
从上图可以看出:销售量排名前3的电脑分别是“联想”、“酷睿”、“苹果”,其次是“华硕”、“戴尔”、“惠普”。


3)电脑需求量最大的前十个城市

在这里插入图片描述
从图中可以看出:四个一线城市“北京”、“上海”、“广州”、“深圳”对于电脑的需求量肯定是最大的。其次“南京”、“杭州”对于电脑的需求较大。


4)电脑销售量最好的前十个店铺

在这里插入图片描述
从图中可以看出:“联想官方旗舰店”的电脑卖的是最好的,其次是“华为官方旗舰店”。相信大家看了这个分析以后,就知道自己应该怎么选择店铺,去选购自己的电脑了。


5)价格最贵的电脑到底是啥样的?

  1. # 将数据按照价格,降序排序
  2. df1 = df.sort_values(by="价格", axis=0, ascending=False)
  3. df1 = df1.iloc[:10,:]
  4. df1.to_excel("价格 排名前10的数据.xlsx",encoding="utf-8-sig",index=None)

结果如下:
在这里插入图片描述
根据上表展示的数据中可以看出:电脑最贵的电脑达到了48948元,不知道你见过没有,反正我是没有见过。该电脑的宣传视频,见文章最开始,具体信息是怎么样子的,你可以自己下去查看。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/361882
推荐阅读
相关标签
  

闽ICP备14008679号