「python爬虫」「selenium」「电商选品数据分析」商品信息抓取小白全教程(二、如何一步步定位目标元素信息)

阅读: 评论:0

「python爬虫」「selenium」「电商选品数据分析」商品信息抓取小白全教程(二、如何一步步定位目标元素信息)

「python爬虫」「selenium」「电商选品数据分析」商品信息抓取小白全教程(二、如何一步步定位目标元素信息)

爬虫分为四个部分,写成了四个函数写成了四个函数get_search(),get_product() ,drop_down(), next_page()

本篇主要介绍第二个函数,也是最主要的部分
对于爬虫需要的一些前置配置以及源网站获取的相关内容,可以参考上一篇文章 -> 商品信息抓取小白全教程(一、源网站的获取以及一些配置的加载)

Get_product()

def get_products(page_index):

是最为重要的功能了
这里函数的输入变量为当前页面所在的页码数字,而页码数的计算则通过后面main函数中range() 的每一项count出。

为了把结果很好的保存到xlsx文件中,(csv也可,只需很小的改动),函数中首先定义global变量方便记录xlsx中的行信息

global  write_row
接下来就是对于页面的爬取了!!!!!~
  1. 首先搞清楚自己需要什么信息
    各大Online shopping网站在搜索具体关键词之后,会给出一个表单

    这样子 来源homedepot
    或者这样子 来源Amazon
    我们的目的是把每一项(这里打包的一个图片对应的信息就是一项)的信息抓取来,包括但不限于商品名字,价格,评分,品牌等。

  2. 查看网站源代码
    在chrome的开发者模式下,我们需要查看源码
    屏幕停留在上述图片的位置, Macbook下键盘“Fn” + “F12”即可出现
    (我们这里只关注源码左上角的Elements,点击elements选中)

    右边为网站的源码,可以试着把光标在源码上下移动(不点击),可以看见左边对应的一些位置出现了一些选中的TAG,如下

    (如果没有的话,点击右边源码最左边的小三角,再试一试

这里,我们的目标是第一点所说的商品列表,所以不断点击源码的下拉小三角,直到左边的选中部分(蓝色)为我们想要的商品信息表。如下




找到啦!~

  1. 根据使用driver.find_elements_by_css_selector来找出想要查找的表单这里为
driver.find_elements_by_css_selector('.product-pod')

上面这个函数返回的为只要对应class为(‘.product-pod’)的所有商品信息,其中每一个商品信息可以通过for item in list 获取

for li in lis:print("------------------ITEM--------------")normal_count += 1 

这里normal_count是在计算现在是第几个商品了

  1. 现在需要找到想要的商品信息是什么

比如:商品的名字,价格

对于获取商品的名字的示范

name =li.find_element_by_css_selector('span.product-pod__title__product').text #商品名字

如上通过上文介绍过的find_element_by_css_selector方法,输入对应的标签位置

这里的商品名字在网站源码的白色部分,而find_element_by_css_selector()的输入参数即为,这一段文字所属于的class product-pod__title__product 。并且class 前还声明了span,所以对应的输入参数即为'span.product-pod__title__product'

对于获取商品价格的示范

price = li.find_element_by_css_selector('div.price-format__main-price').text 

同样通过上文介绍过的find_element_by_css_selector方法,输入对应的标签位置


这里的商品价格在网站源码的白色部分标出,此时find_element_by_css_selector()的输入参数即为 这一段文字所属于的class price-format__main-price 。并且class 前还声明了div,所以对应的输入参数即为'div.price-format__main-price'

对于获取商品评分的示范

这里的商品评分是小星星的几格格数,没有特定的数字,所以这里我们模糊的使用小星星被填满的百分比作为大致的评分

score = li.find_element_by_css_selector('span.stars--c43xm').get_attribute('style')


根据上述情况,这里我们需要获取的信息不是网站源码的白色字体部分,而是stars的一个属性,名为style。同样的,写明class的种类和class前面的span'span.stars--c43xm'。而后根据find_element_by_css_selector自带的get_attribute()函数获取style标签写明的width blablabla信息。
P.S. 关于get_attribute()我没有找到官方的相关说明,是从这里找到的使用方法。(找不到了)

对于获取商品地址的示范~

这个抓取到csv或xlsx表格后使用很方便 建议加上~

这里的链接所属的class为header.product-pod--ie-fix, class前面有a标签,所以函数的输入为'a.header.product-pod--ie-fix'

同样的,对于不是text类型的信息输出,我们使用get_attribute()函数来抓取,这里函数的输入为href(链接url)。

addr = li.find_element_by_css_selector('a.header.product-pod--ie-fix').get_attribute('href')

P.S.对于Amazon亚马逊之类网站的抓取,他的商品详情页url不全,如果需要的话在抓取之后对于字符串处理需要加上一个amazon的头(http啥的)

把收集来的信息写入xlsx表格文件

write_row += 1worksheet.write_row('A'+str(write_row),[name,identifier,price,Favorite_count,brand,score,NumOfreviews,cur_pos,addr])

这一段的完整代码:

 			Favorite_count = li.find_element_by_css_selector('span.Favorite-wrapper--count').textbrand =  li.find_element_by_css_selector('span.product-pod__title__brand--bold').textname =li.find_element_by_css_selector('span.product-pod__title__product').text #商品名字price = li.find_element_by_css_selector('div.price-format__main-price').text  cur_pos = str(page_index)+"-"+str(normal_count)#badge = li.find_element_by_css_selector('span.product-pod__badge').textidentifier = li.find_element_by_css_selector('div.product-identifier.product-identifier__model').text NumOfreviews = li.find_element_by_css_selector('span.ratings__count--6r7g3').textscore = li.find_element_by_css_selector('span.stars--c43xm').get_attribute('style')addr = li.find_element_by_css_selector('a.header.product-pod--ie-fix').get_attribute('href')print(Favorite_count,brand,name,price,identifier,score,NumOfreviews,cur_pos,addr)# 写入到excelwrite_row += 1worksheet.write_row('A'+str(write_row),[name,identifier,price,Favorite_count,brand,score,NumOfreviews,cur_pos,addr])

关于更多的定位元素方法,可以参考这篇-> Selenium四 find_element_by_css_selector()的几种方法
对于xpath方法的相关介绍Selenium自动化爬取某东商品信息和谈谈爬虫中定位元素的常见方法
以及python爬虫之定位网页元素的三种方式

函数的完整代码:

def get_products(page_index):global  write_rowlis = driver.find_elements_by_css_selector('.product-pod')normal_count = 0for li in lis:print("------------------ITEM--------------")normal_count += 1try:Favorite_count = li.find_element_by_css_selector('span.Favorite-wrapper--count').textbrand =  li.find_element_by_css_selector('span.product-pod__title__brand--bold').textname =li.find_element_by_css_selector('span.product-pod__title__product').text #商品名字price = li.find_element_by_css_selector('div.price-format__main-price').text  cur_pos = str(page_index)+"-"+str(normal_count)#badge = li.find_element_by_css_selector('span.product-pod__badge').textidentifier = li.find_element_by_css_selector('div.product-identifier.product-identifier__model').text NumOfreviews = li.find_element_by_css_selector('span.ratings__count--6r7g3').textscore = li.find_element_by_css_selector('span.stars--c43xm').get_attribute('style')addr = li.find_element_by_css_selector('a.header.product-pod--ie-fix').get_attribute('href')#addr = "" + addr#str_list = list(str(addr))#str_list.insert(str(addr).find("child=1") + 7, '&language=en_US')#addr = ''.join(str_list)print(Favorite_count,brand,name,price,identifier,score,NumOfreviews,cur_pos,addr)# 写入到excelwrite_row += 1worksheet.write_row('A'+str(write_row),[name,identifier,price,Favorite_count,brand,score,NumOfreviews,cur_pos,addr])except Exception as er:print(page_index,"-",normal_count, "Missing an item~~~~~~~~~~~")if normal_count == 24:break

本文发布于:2024-02-02 00:40:53,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170681096540274.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:爬虫   商品信息   元素   目标   教程
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23