在爬虫京东商品的过程中,遇到的问题:
页面未加载完全,就开始获取数据,应该等待(time.sleep)
**工具:**selenium
库:
from selenium import webdriver #爬虫网站用到的库
from selenium.webdriver.common.by import By #在find_element时使用
from selenium.webdriver.support.wait import WebDriverWait # 在等待加载时使用
from selenium.webdriver.support import expected_conditions as EC #等待什么时候呢?期待的conditions的时候
import time #用于模拟人的操作 确保网站加载完成,再进行搜索
开始模拟你的操作:
#打开浏览器
driver = webdriver.Chrome()
#进入京东网 —有自带的get方法,所以就不用模拟找搜索框,再输入,按确定这个过程了
url = "https://www.jd.com/"
driver.get(url)
#搜索要查找的商品,我这里是一本书—这里要有找搜索框、按钮,输入搜索内容,按下按钮,这个过程
#寻找搜索框
#寻找之前创建一个wait对象
wait = WebDriverWait(driver,10,0.5) #wait共10秒,每0.5秒问一次,有没有加载好
inputbox=wait.until(EC.presence_of_element_located((By.XPATH,"/html/body/div[1]/div[4]/div/div[2]/div/div[2]/input")))
#输入框输入汉字
inputbox.send_keys("Linux就该这么学")
#找到按钮并点击
button = driver.find_element(By.XPATH,"/html/body/div[1]/div[4]/div/div[2]/div/div[2]/button")
button.click()
#按钮点击完要等待一秒,这是规矩,因为点击完后,页面加载还需要时间
time.sleep(1)
#像京东淘宝这种网站,如果滚动条不滚动到下面,你就获取不了下面的信息
#这是一种反爬虫机制,所以我们要模拟人的行为去控制滚动条
#滚动条到最下面
driver.excute_script('window.scrollTo(0,document.body.scrollHeight);')
#滚动后要等待加载一秒,这是规矩
time.sleep(1)
#准备工作完成,开始获取书名
xpath= '/html/body/div[5]/div[2]/div/div[1]/div/div[2]/ul/li/div/div[@class="p-name"]/a/em'
titles = wait.until(EC_presence_of_all_elements_located((By.PATH,xpath))
|