zoukankan      html  css  js  c++  java
  • python爬虫09selenium

    selenium 变成了爬虫利器

     

    我们先来安装一下

     

    pip install selenium

     

    接着我们还要下载浏览器驱动

     

    小帅b用的是 Chrome 浏览器

     

    所以下载的是 Chrome 驱动

     

    当然你用别的浏览器也阔以

     

    去相应的地方下载就行了

     

    Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads
    Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
    Firefox: https://github.com/mozilla/geckodriver/releases
    Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/

    下载完之后

     

    要配置一下环境变量

    这就是 selenium 的魅力

     

    我们来看下我们刚刚写的代码

     

    我们导入了 web 驱动模块

     

    from selenium import webdriver

     

    接着我们创建了一个 Chrome 驱动

     

    driver = webdriver.Chrome()

     

    有了实例之后

     

    相当于我们有了 Chrome 浏览器了

     

    接着使用 get 方法打开百度

     

    driver.get("https://www.baidu.com")

     

    打开百度之后

     

    我们获取到输入框

     

    至于怎么获取

     

    等等会讲

     

    获取到输入框之后我们就往里面写入我们要搜索的内容

     

    input = driver.find_element_by_css_selector('#kw')
    input.send_keys("苍老师照片")

     

    输入完了之后呢

     

    我们就获取到搜索这个按钮

     

    然后点击

     

    button = driver.find_element_by_css_selector('#su')
    button.click()

    当我们使用驱动打开了一个页面

     

    这时候其实没什么鸟用

     

    因为我们要对那些元素进行操作

     

    就像刚刚我们要获取输入框然后输入一些内容

     

    还有获取按钮点击什么的

     

    selenium 提供了挺多方法给我们获取的

     

    当我们要在页面中获取一个元素的时候

     

    可以使用这些方法

     

    • find_element_by_id

    • find_element_by_name

    • find_element_by_xpath

    • find_element_by_link_text

    • find_element_by_partial_link_text

    • find_element_by_tag_name

    • find_element_by_class_name

    • find_element_by_css_selector

     

     

    想要在页面获取多个元素呢

     

    就可以这样

     

    • find_elements_by_name

    • find_elements_by_xpath

    • find_elements_by_link_text

    • find_elements_by_partial_link_text

    • find_elements_by_tag_name

    • find_elements_by_class_name

    • find_elements_by_css_selector

     

     

    比如我们打开了一个页面

     

    是这样的 HTML

     

    <html>
    <body>
     <form id="loginForm">
      <input name="username" type="text" />
      <input name="password" type="password" />
      <input class="login" name="continue" type="submit" value="Login" />
     </form>
    </body>
    <html>

     

     

    可以通过 id 获取 form 表单

     

    login_form = driver.find_element_by_id('loginForm')

     

    通过 name 获取相应的输入框

     

    username = driver.find_element_by_name('username')
    password = driver.find_element_by_name('password')

     

    通过 xpath 获取表单

     

    login_form = driver.find_element_by_xpath("/html/body/form[1]")
    login_form = driver.find_element_by_xpath("//form[1]")
    login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

     

     

    通过标签获取相应的输入框

     

    input1 = driver.find_element_by_tag_name('input')

     

    通过 class 获取相应的元素

     

    login = driver.find_element_by_class_name('login')

     

     

    用 Chrome 浏览器的审核元素

     

    可以很方便获取相应的属性

     

    直接 copy 就完事了

     

     

     

    如果你觉得

     

    find_element_by_xxx_xxx

     

    太长了

     

    那么你还可以这样

     

    driver.find_elements(By.ID, 'xxx')

     

    By.属性和上面的是一样的

     

    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"

     

     

    当然

     

    我们玩的是爬虫

     

    要的就是源代码

     

    我们已经知道

     

    通过

     

    driver = webdriver.Chrome()

     

    可以拿到浏览器对象

     

    那么要获取源代码还不简单么?

     

    获取请求链接

     

    driver.current_url

     

    获取 cookies

     

    driver.get_cookies()

     

    获取源代码

     

    driver.page_source

     

    获取文本的值

     

    input.text

     

    ok



  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/hrnn/p/13307451.html
Copyright © 2011-2022 走看看