当前位置:   article > 正文

【Python爬虫】基于selenium库爬取京东商品数据——以“七夕”为例_京东图书 selenium

京东图书 selenium

小白学爬虫,费了一番功夫终于成功了哈哈!本文将结合本人踩雷经历,分享给各位学友~

一、导包

  1. import time
  2. import csv
  3. from selenium import webdriver

二、创建csv文件

用写入方式打开名为data的csv文件,并确定将要提取的五项数据。

  1. f = open('data.csv',mode = 'w',encoding ='utf-8',newline = '')
  2. #将表头信息写入文件
  3. csv_writer = csv.DictWriter(f,fieldnames = ['标题','价格','评论','店名','详情页'])
  4. csv_writer.writeheader()

三、搜索商品页并加载数据

  1. #实例化浏览器对象
  2. driver = webdriver.Edge('C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\msedgedriver.exe')
  3. #访问京东网址
  4. driver.get('https://www.jd.com/')
  5. #定位搜索框,并输入查找内容‘七夕’
  6. driver.find_element_by_id('key').send_keys('七夕')
  7. #点击搜索按钮
  8. driver.find_element_by_class_name('button').click()
  9. #等待界面数据加载
  10. driver.implicitly_wait(10)
  11. #有些网页是鼠标一边下移一边加载,该函数使页面数据全部加载
  12. def drop_down():
  13. for x in range(1,12,2):
  14. time.sleep(1)
  15. j = x / 9
  16. # document.documetnElement,scrollTop 指定滚动条的位置
  17. # document.documentElement.scrollHeight 获取浏览器页面的最大高度
  18. js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
  19. driver.execute_script(js)

上面第一行代码值得一提,driver =  webdriver.Edge()括号内为Edge浏览器驱动程序地址,需要在Edge浏览器设置中查找Edge浏览器版本,并下载对应版本的驱动程序,具体操作如下:

1.在设置中找到Edge浏览器对应版本

2.下载驱动程序

驱动路径来源(读者需自行替换):

Step1:根据官网提供网址 Microsoft Edge WebDriver - Microsoft Edge Developer

找到和自己Edge浏览器版本一致的驱动程序。这里等待时间稍微有点长,请耐心等待。

Step2:将安装包解压到不包含中文的路径下,获得msedgedriver.exe文件

Step3:将完整路径填入到driver = webdriver.Edge()括号内,注意路径需包含\msedgedriver.exe

第三行代码定位搜索框的流程也介绍一下:

首先,打开京东,在空白处右击,单击“检查”,弹出框图如下

 单击弹出框框左上角的标识,并将鼠标放在搜索框中,再单击一下固定位置,找到对应代码。

 找到其中的id为‘key’,可根据该项特征定位搜索框。第四行代码定位搜索按钮采取相同方式定位,不同的是搜索按钮根据类名定位,找到class = “……”中的内容即可。

 

四、获取多页数据并逐行写入csv文件

  1. #提取第1~7页的内容
  2. for page in range(1,7):
  3. #调用函数
  4. drop_down()
  5. #获取所有商品对应标签(列表),注意此处是elements而不是element
  6. lis = driver.find_elements_by_css_selector('.gl-item')
  7. #print(lis)
  8. #将列表元素一个个拿出来
  9. for li in lis:
  10. title = li.find_element_by_css_selector('.p-name em').text.replace('\n','')
  11. price = li.find_element_by_css_selector('.p-price strong i').text
  12. comment = li.find_element_by_css_selector('.p-commit strong').text
  13. shop = li.find_element_by_css_selector('.p-shop span a').text
  14. link = li.find_element_by_css_selector('.p-img a').get_attribute('href')
  15. dit = {
  16. '标题':title,
  17. '价格':price,
  18. '评论':comment,
  19. '店名':shop,
  20. '详情页':link
  21. }
  22. #写入csv
  23. csv_writer.writerow(dit)
  24. #及时刷新缓冲区
  25. f.flush()
  26. print(dit)
  27. #点击下一页按钮
  28. driver.find_element_by_class_name('pn-next').click()

发现出现了find_element_by_css_selector('……'),那省略号的内容又该在哪儿找呢?我们以代码lis = driver.find_elements_by_css_selector('.gl-item')为例说明一下。

在首页搜索“七夕”,得到商品页。

同样右击,单击“检查”,单击弹出框左上角标识,把鼠标移动到商品上(要全部框选),单击一下固定代码位置 ,再查看右侧框中选项。

 虽然含有 .goods-list-v2 和 .gl-item 两项,然而,.gl-item足以标记所有商品,故省略号仅填.gl-item即可。

五、代码汇总

  1. import time
  2. import csv
  3. from selenium import webdriver
  4. f = open('data.csv',mode = 'w',encoding ='utf-8',newline = '')
  5. #将表头信息写入文件
  6. csv_writer = csv.DictWriter(f,fieldnames = ['标题','价格','评论','店名','详情页'])
  7. csv_writer.writeheader()
  8. #实例化浏览器对象(第一句需要修改,具体方法见上文)
  9. driver = webdriver.Edge('C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\msedgedriver.exe')
  10. #访问京东网址
  11. driver.get('https://www.jd.com/')
  12. #定位搜索框,并输入查找内容‘七夕’
  13. driver.find_element_by_id('key').send_keys('七夕')
  14. #点击搜索按钮
  15. driver.find_element_by_class_name('button').click()
  16. #等待界面数据加载
  17. driver.implicitly_wait(10)
  18. #有些网页是鼠标一边下移一边加载,该函数使页面数据全部加载
  19. def drop_down():
  20. for x in range(1,12,2):
  21. time.sleep(1)
  22. j = x / 9
  23. # document.documetnElement,scrollTop 指定滚动条的位置
  24. # document.documentElement.scrollHeight 获取浏览器页面的最大高度
  25. js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
  26. driver.execute_script(js)
  27. #提取第1~7页的内容
  28. for page in range(1,7):
  29. #调用函数
  30. drop_down()
  31. #获取所有商品对应标签(列表),注意此处是elements而不是element
  32. lis = driver.find_elements_by_css_selector('.gl-item')
  33. #print(lis)
  34. #将列表元素一个个拿出来
  35. for li in lis:
  36. title = li.find_element_by_css_selector('.p-name em').text.replace('\n','')
  37. price = li.find_element_by_css_selector('.p-price strong i').text
  38. comment = li.find_element_by_css_selector('.p-commit strong').text
  39. shop = li.find_element_by_css_selector('.p-shop span a').text
  40. link = li.find_element_by_css_selector('.p-img a').get_attribute('href')
  41. dit = {
  42. '标题':title,
  43. '价格':price,
  44. '评论':comment,
  45. '店名':shop,
  46. '详情页':link
  47. }
  48. #写入csv
  49. csv_writer.writerow(dit)
  50. #及时刷新缓冲区
  51. f.flush()
  52. print(dit)
  53. #点击下一页按钮
  54. driver.find_element_by_class_name('pn-next').click()

 感谢读者大大读到此处~学习辛苦啦!

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

闽ICP备14008679号