51Testing软件测试论坛

标题: 手把手教你用selenium爬取某东月饼数据 [打印本页]

作者: lsekfe    时间: 2021-9-15 10:08
标题: 手把手教你用selenium爬取某东月饼数据
实例化一个浏览器对象
  1. driver = webdriver.Chrome()
  2.   driver.get('https://www.jd.com')
复制代码
定义搜索的关键字
  打开浏览器会发现URL的格式。


[attach]134415[/attach]
 搜索功能
def get_product(key):
      # 定位到搜索框
      driver.find_element_by_css_selector('#key').send_keys(keyword)
      # 定位到搜索按钮
      driver.find_element_by_css_selector('.button').click()
      # 防止超时,等待加载,设置为10S
      driver.implicitly_wait(10)
      # 最大化浏览器效果

 解决图片懒加载

# 解决懒加载
  def drop_down():
      for x in range(1,11,2):
          time.sleep(0.5)
          # 控制翻页
          j = x / 10
          js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
          driver.execute_script(js)

解析商品数据

[attach]134416[/attach]
通过定位发现,商品都有gl-item属性。
  拿到商品集合
# 解析商品数据
  def parse_product():
      # 拿到商品集合
      lis = driver.find_elements_by_css_selector('.gl-item')

解析商品名称

[attach]134417[/attach]
通过定位发现,商品名称在p-name下的em标签中。
 # 解析商品数据
  def parse_product():
      # 拿到商品集合
      lis = driver.find_elements_by_css_selector('.gl-item')
      for li in lis:
        try:
          # 商品名称
          product_name = li.find_element_by_css_selector('div.p-name a em').text

解析商品价格

[attach]134418[/attach]
通过定位发现,商品价格在p-price下的i标签中。
# 解析商品数据
  def parse_product():
      # 拿到商品集合
      lis = driver.find_elements_by_css_selector('.gl-item')
      for li in lis:
        try:
          # 商品名称
          product_name = li.find_element_by_css_selector('div.p-name a em').text
          # 商品价格
          product_price = li.find_element_by_css_selector('div.p-price strong i').text + '元'

解析商品评价数量

[attach]134419[/attach]
通过定位发现,商品价格在p-commit下的a标签中。
# 解析商品数据
  def parse_product():
      # 拿到商品集合
      lis = driver.find_elements_by_css_selector('.gl-item')
      for li in lis:
        try:
          # 商品名称
          product_name = li.find_element_by_css_selector('div.p-name a em').text
          # 商品价格
          product_price = li.find_element_by_css_selector('div.p-price strong i').text + '元'
          # 商品评价数量
          product_comment =  li.find_element_by_css_selector('div.p-commit strong a').text

解析店铺名称

[attach]134420[/attach]
通过定位发现,商品价格在span下的a标签中。
# 解析商品数据
  def parse_product():
      # 拿到商品集合
      lis = driver.find_elements_by_css_selector('.gl-item')
      for li in lis:
        try:
          # 商品名称
          product_name = li.find_element_by_css_selector('div.p-name a em').text
          # 商品价格
          product_price = li.find_element_by_css_selector('div.p-price strong i').text + '元'
          # 商品评价
          product_comment =  li.find_element_by_css_selector('div.p-commit strong a').text
          # 店铺名称
          product_shop_name = li.find_element_by_css_selector('span.J_im_icon a').text
         #打印数据
         print(product_shop_name,product_price,product_comment,product_shop_name)

解析数据保存到csv文件

with open('data_jd.csv',mode='a',encoding='utf-8',newline='') as f:
        csv_write = csv.writer(f)
        csv_write.writerow([product_name,product_price,product_name,product_shop_name])
  except Exception as e:
   print(e)

 总结
  到最后,本期教程完成了爬取京东月饼销售数据的操作,并保存到csv文件,搜索不仅限于月饼,也可用于其他商品。
[attach]134421[/attach]



作者: 千里    时间: 2021-9-18 15:18
又开始搞事了?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2