Python使用selenium自动化测试爬取苏宁冰箱价格及型号并保存在csv中

苏宁易购上对于冰箱的价格信息,是被Js渲染过的,无法通过request、bs4库或者是scrapy直接爬取下来的,所以今天学习并使用了selenium库,并将所有冰箱的价格及型号全部保存在csv中。

  • 使用selenium库之前,需要在网站上下载Chromedeiver,而且必须下载配套自己谷歌浏览器版本的,网站是:http://npm.taobao.org/mirrors/chromedriver
  • 配套上time库,因为js渲染加载需要一定的时间,如果没有充足的时间把物品信息加载出来的话,会导致爬取不全,爬到非常少的相关冰箱信息。time.sleep()参数是秒。
  • 在第一面刚刚打开网站的时候,会有一个大广告,所以selenium库正好可以操作一个botton按钮,click进行关闭,自动化库的使用过程就是模拟一个人的使用,如果不关闭广告的话我们也是无法就像是用这个网站的。
  • 模拟网站下拉操作,下拉可以使后续的网页信息加载Js,越往下拉数据越多,本人在下拉的整个过程中使网页停止了20秒,给网页充足的时间显示信息。
  • 对价格、型号的xpath进行解析,对于获取所有信息。
  • 显示并保存到csv中,不知道为什么在爬取所有的信息的时候,会出现空行,应该是有这样的xpath标签但是其中没有任何数据,也是为了更好的保存到csv中,我们把每个对应的值保存在一个字符串中,对字符串进行判断,如果不为空显示且保存。(最后保证数据的可视化)
  • 对于1-40的网页我们使用按钮点击,click每个网页的下方右键按钮,每次点击都会调转到下一页上,苏宁的冰箱对于网页的操作作死没有数字,用的是second。。。所以只能够用selenium模拟点击。所有操作循环来进行。
  • 保存在csv表格一定要注意设置encoding,否则乱码。因为下一页算是追加信息,文件读取类型里,我们使用a来做文件的标注。追加不留空行,要加入newline。

这就是所有用爬虫爬取到的代码信息,以后可以套模板了:

import selenium
from selenium import  webdriver
import time
import csv
import codecs

csvFile=open('C:\\Users\\JYuXuAN\\Desktop\\sn.csv','a',encoding='utf-8-sig', newline="")
writer=csv.writer(csvFile)
writer.writerow(['价格','冰箱信息'])

driver = webdriver.Chrome(executable_path='C:\\Users\\JYuXuAN\\AppData\\Local\\CentBrowser\\Application\\chromedriver.exe')
driver.get('https://search.suning.com/%E5%86%B0%E7%AE%B1/')

botton=driver.find_element_by_class_name('close-btn')
time.sleep(2)
botton.click()

num=1
while(num!=40):

    driver.execute_script("""
        (function () {
        var y = 0;
        var step = 100;
        window.scroll(0, 0);
        function f() {
        if (y < document.body.scrollHeight) {
        y += step;
        window.scroll(0, y);
        setTimeout(f, 100);
        } else {
        window.scroll(0, 0);
        document.title += "scroll-done";
        }
        }
        setTimeout(f, 1000);
        })();
        """)
    time.sleep(20)

    price=driver.find_elements_by_xpath('//span[@class="def-price"]')
    info=driver.find_elements_by_xpath('//div[@class="title-selling-point"]/a[1]')

    for p,i in zip(price,info):
        s1=""+str(p.text)
        s2=""+str(i.text)
        if(s1!=''):
            print("价格为:"+s1,end="   ")
            print("物品信息:"+s2)
            writer.writerow([s1,s2])

    botton2=driver.find_element_by_class_name('next')
    time.sleep(1)
    botton2.click()
    num=num+1
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值