本篇主要介绍第二个函数,也是最主要的部分
对于爬虫需要的一些前置配置以及源网站获取的相关内容,可以参考上一篇文章 -> 商品信息抓取小白全教程(一、源网站的获取以及一些配置的加载)
def get_products(page_index):
是最为重要的功能了
这里函数的输入变量为当前页面所在的页码数字,而页码数的计算则通过后面main函数中range() 的每一项count出。
为了把结果很好的保存到xlsx文件中,(csv也可,只需很小的改动),函数中首先定义global变量方便记录xlsx中的行信息
global write_row
首先搞清楚自己需要什么信息
各大Online shopping网站在搜索具体关键词之后,会给出一个表单
这样子 来源homedepot
或者这样子 来源Amazon
我们的目的是把每一项(这里打包的一个图片对应的信息就是一项)的信息抓取来,包括但不限于商品名字,价格,评分,品牌等。
查看网站源代码
在chrome的开发者模式下,我们需要查看源码
屏幕停留在上述图片的位置, Macbook下键盘“Fn” + “F12”即可出现
(我们这里只关注源码左上角的Elements,点击elements选中)
右边为网站的源码,可以试着把光标在源码上下移动(不点击),可以看见左边对应的一些位置出现了一些选中的TAG,如下
(如果没有的话,点击右边源码最左边的小三角,再试一试
这里,我们的目标是第一点所说的商品列表,所以不断点击源码的下拉小三角,直到左边的选中部分(蓝色)为我们想要的商品信息表。如下
找到啦!~
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是在计算现在是第几个商品了
比如:商品的名字,价格
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()我没有找到官方的相关说明,是从这里找到的使用方法。(找不到了)
这里的链接所属的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啥的)
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 条评论) |