• Python:利用 selenium 库抓取动态网页示例


    前言

    在抓取常规的静态网页时,我们直接请求对应的 url 就可以获取到完整的 HTML 页面,但是对于动态页面,网页显示的内容往往是通过 ajax 动态去生成的,所以如果是用 urllib.request 直接获取页面的 HTML 时,就获取不到我们所想用的内容,这时我们就可以利用 selenium 库就可以获得我们所需要的内容了。

    需安装的三方库

    • BeautifulSoup4
    • selenium
    • lxml

    示例代码

    示例说明:获取德邦官网设立了网点的市区名称

    import urllib.request
    from bs4 import BeautifulSoup
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.add_argument("--headless") #设置该参数使在获取网页时不打开浏览器
    
    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path="./chromedriver")
    driver.get("https://www.deppon.com/deptlist/")
    html = driver.page_source
    driver.close()
    soup = BeautifulSoup(html, 'lxml')
    items = soup.select('div[class~="listA_Z"] a')
    for item in items:
        print(item.string)
    

    碰到的小问题

    1. 用 "pip install selenium" 安装 selenium 库时失败。可以利用下面的命令来安装"pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org selenium"。
    2. 在使用时 webdriver.Chrome()时出现的问题,在网上看到的文章用的是火狐浏览器,他们直接使用 webdriver.Firefox()就可以了,而我是用谷歌浏览器,我以为用谷歌浏览器和用火狐浏览器一样的,但是在运行时出错了,后来再网上找了一下,是要在 selenium 官网下载Chrom Driver,然后在使用 webdriver.chorme()函数时,需要传 executable_path 参数,该参数的值就是在 selenium 官网下载的 Chrome Driver.exe 文件所在的路径。示例中我是把chromedriver.exe放在根目录,所以代码里我用的是相对路径( executable_path="./chromedriver")。

    推荐

    Chrom/firefox 浏览器插件:Katalon Recorder,Katalon Recorder是一个前端自动化测试插件,它可以用来记录你在网页上的所有操作,最神奇的是它还可以把记录导出为各种代码,这其中就包含了Python2的代码。有时借用它,甚至可以不用去分析HTML的结构就可以轻松地让我们获取取得所需要的数据了,这对于那种HTML结构凌乱的网页还是很有帮助的。

  • 相关阅读:
    线程池中shutdown()和shutdownNow()方法的区别
    java.util.concurrent.TimeoutException: Idle timeout expired: 300000/300000 ms
    ConnectTimeout和ReadTimeout所代表的意义
    hive 查询注意问题
    java面试题之int和Integer的区别
    MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别
    MySQL数据库使用mysqldump导出数据详解
    C++宏定义详解
    OTL调用存储过程/函数及注意事项
    linux自定义开机启动服务和chkconfig使用方法
  • 原文地址:https://www.cnblogs.com/Lau7/p/9114784.html
Copyright © 2020-2023  润新知