selenium爬虫入门(1)

selenium爬虫入门(1),第1张

selenium爬虫入门(1)

contents
  • 安装
  • 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

selenuim小实验

目标:爬取红框内的文字

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()

访问URL和导航code访问一个网页driver.get(“放一个网址”)获取当前URLdriver.current_url返回上一页driver.back()前往一页driver.forward()刷新页面driver.refresh()获取标题driver.title最大化窗口driver.maximize_window()全屏窗口driver.fullscreen_window()屏幕截图driver.save_sreenshot("./image.png")元素截图element.screenshot("./image.png")关闭driverdriver.close

定位元素的方式:class name, css selector, id, name, link text, partial link text, tag name, xpath

定位和查找页面元素code定位单个元素driver.find_element(By.NAME,“q”)定位多个元素driver.find_elements(By.TAG_NAME,“q”)获取元素的子元素search_form.find_element(By.TAG_NAME,“q”)获取元素的多个子元素search_form.find_elements(By.TAG_NAME,“p”)获取标签名driver.find_element(By.CSS_SELECTOR,“h1”).tag_name获取文本driver.find_element(By.CSS_SELECTOR,“h1”).text获取属性activate_element.get_attribute(“title”)

等待页面加载完毕,元素加载完毕再取数据,否则会报错
用等待条件:

from selenium.webdriver.support.ui import WebDriverWait 
WebDriverWait(driver,timeout=3).until(condition)  #等待10s 检测网页的title中是否已经显示python
参数含义timeout=3设置等待时间为3sconditon写条件,如果限定时间内条件为False则会报错 键盘 *** 作code库发送内容,并回车driver.find_element(By.NAME,“q”).send_keys("输入内容“+keys.ENTER)from selenium.webdriver.common.keys import Keys

示例:输入内容,然后清理

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)#给加载预留时间

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5651921.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存