selenium爬取薄荷网站食品食品信息

今天带大家一起学(复)习模拟浏览器运行的库Selenium,它是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla FirefoxSafariGoogle ChromeOperaEdge等。

这里我将以Chrome为例进行Selenium功能的演示来爬取薄荷网站的食品热量信息

 

我使用的是最新版本的chormedriver,chormdriver应与自己的chorm浏览器版本相对应

调用的库

from selenium import webdriver
import csv
from selenium.webdriver.common.by import By

添加参数

因为平时在使用网页自动化调试程序时,执行完成后网页会自行关闭无法知道自动化程序错误停止在哪里,所以这里加了两行代码来使其不会自动关闭浏览器

# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)

# 注意此处添加了chrome_options参数
driver = webdriver.Chrome(chrome_options=option)
#driver.implicitly_wait(5)

初始化并进入想要爬取的界面

driver = webdriver.Chrome(chrome_options=option)
driver.implicitly_wait(5)
driver.get('https://www.boohee.com/')
bottom1 = driver.find_element(By.XPATH,'/html/body/div[1]/header/div/nav/div[6]')
bottom1.click()
bottom2 = driver.find_element(By.XPATH,'//*[@id="main"]/div[1]/div/ul/li[1]')
bottom2.click()

文件操作即部分变量初始化

i = 1
j = 0
k = 2
f = open("output/task_10.csv",'w')
writer = csv.writer(f)

代码主体循环

L = [3,4,5,6,7,8,9,10]
for k in L :
    while j<10 :
        while i<11:
            data1 = driver.find_elements(By.XPATH,'//*[@id="main"]/div/div[2]/ul/li[' + str(i)+']/div[2]/h4/a')[0].text
            if data1 == None:
                break
            writer.writerow([data1])
            data3 = driver.find_elements(By.XPATH,'//*[@id="main"]/div/div[2]/ul/li[' + str(i)+']/div[2]/h4/a')[0].get_attribute('href')
            data2 = driver.find_elements(By.XPATH,'//*[@id="main"]/div/div[2]/ul/li['+str(i)+']/div[2]/p')[0].text
            writer.writerow([data2])
            writer.writerow([data3])
            i+=1
        bottom3 = driver.find_element(By.CSS_SELECTOR,'.next_page')
        bottom3.click()
        #if bottom3 == None:
        #    break
        j+=1
        i = 1
    if k == 5 :
        k+=1
    if k == 6 :
        k+=1
    driver.get('https://www.boohee.com/food/group/'+str(k+1))
    #bottom4 = driver.find_element(By.XPATH,'//*[@id="main"]/div/div[1]/ul/li['+str(k)+']/a')
    #bottom4.click()
    j = 0

实际运行结果只能爬取500多条,使用xpath路径爬取元素的缺点就是,网站源码发生变化就可能导致查不到元素。我跳过第二三页继续爬取的原因也是,程序莫名在那里断点,但我浏览网页html源码没能找出问题,对我这个python小白来说非常头疼,所以索性跳过了这页。

爬取的结果

 

但实际上代码还是无法正常运行完,到了第五类或者第六类的时候断点,不同时间段跑的结果还不一样QAQ

总之非常头疼

感觉不如。。。。。。requests

 (ps:这句话是在别的博客看到的,但忘记出处,侵删)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值