今天带大家一起学(复)习模拟浏览器运行的库Selenium
,它是一个用于Web
应用程序测试的工具。Selenium
测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE
(7, 8, 9, 10, 11),Mozilla Firefox
,Safari
,Google Chrome
,Opera
和Edge
等。
这里我将以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:这句话是在别的博客看到的,但忘记出处,侵删)