
- 安装
- selenuim小实验
- selenium常用语法
- 百度爬虫(翻页,爬取标题)
selenium可以伪装成真实的浏览器,被封禁的概率更低,有动态JS加载,登录验证,表单提交,只是相比requests,性能比较差爬取的慢 安装
step1:浏览器驱动安装要对应真实浏览器的版本,查看chrome浏览器版本
step2:找到对应或接近的版本,下载浏览器驱动ChromeDriver
https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/
将该chromedriver.exe所在目录放到环境路径下。
step3:pip install selenium
目标:爬取红框内的文字
from selenium.webdriver import Chrome #导入chrome的浏览器驱动chromedriver
from selenium.webdriver.support.ui import WebDriverWait #网页检测
#驱动selenium打开网页
driver=Chrome(executable_path=r"C:WebDriverbinchromedriver.exe") #创建实例,如果加入到了环境变量可不写?
driver.get("https://www.python.org/")
#判断网页是否加载完毕
WebDriverWait(driver,10).until(lambda d: "python" in d.title) #等待10s 检测网页的title中是否已经显示python
打开https://www.python.org/,在页面右键点击检查,点击红框中的符号,再找到要爬取的内容点击,下图中的元素(element)就会定位到文本中的地址,右键copy,选copy Xpath
from selenium.webdriver.common.by import By #用XPATH爬取元素的内容 print(driver.find_element(By.XPATH,'//*[@id="touchnav-wrapper"]/header/div/div[3]/p').text) #打印爬取到的内容selenium常用语法
driver=Chrome()
定位元素的方式:class name, css selector, id, name, link text, partial link text, tag name, xpath
等待页面加载完毕,元素加载完毕再取数据,否则会报错
用等待条件:
from selenium.webdriver.support.ui import WebDriverWait WebDriverWait(driver,timeout=3).until(condition) #等待10s 检测网页的title中是否已经显示python
示例:输入内容,然后清理
from selenium.webdriver.common.keys import Keys
SearchInput=driver.find_element(By.NAME,"q")
SearchInput.send_keys("selenium爬虫"+Keys.ENTER)
SearchInput.clear()
也可使用点击.click()
SearchInput=driver.find_element(By.XPATH,"q1")
SearchInput.send_keys("selenium爬虫")
driver.find_element(By.XPATH,"q2").click()
SearchInput.clear()
百度爬虫(翻页,爬取标题)
from selenium.webdriver import Chrome #导入chrome的浏览器驱动chromedriver
from selenium.webdriver.support.ui import WebDriverWait #网页是否加载完毕
from selenium.webdriver.support.expected_conditions import title_contains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
#驱动selenium打开网页
driver=Chrome() #创建实例,如果加入到了环境变量可不写
driver.get("https://www.baidu.com/")
searchinput=driver.find_element(By.XPATH,'//*[@id="kw"]')
searchinput.send_keys('Python'+Keys.ENTER)
#判断网页是否加载完毕
WebDriverWait(driver,10).until(title_contains("Python"))
#写文件
with open('baidu.txt','a') as f:
i=0
while i <3:
h3=driver.find_elements(By.CSS_SELECTOR,'h3.t')
for h in h3:
f.write(h.text+"n")
#翻页
driver.find_element(By.XPATH,'//*[@id="page"]/div/a[last()]').click() #XPATH原本是//*[@id="page"]/div/a[10],但是他不一定是第十个位置,改成last()
i+=1
time.sleep(3)#给加载预留时间
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)