Selenium 的安装

简介

Selenium 是一个自动化测试工具,利用它可用驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript 动态渲染的页面来说,此中抓取方式非常有效。

安装

安装 selenium

pip install selenium

这样做还不够,因为我们还需要用浏览器(如 Chrome、Firefox 等)来配合 Selenium 工作。

谷歌
http://chromedriver.storage.googleapis.com/index.html
火狐
https://github.com/mozilla/geckodriver/releases

把下载的驱动(chromedriver.exe)文件拖到 Python 的 Scripts 目录下,也可以单独将其所在路径配置到环境变量。

访问页面

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.taobao.com')
print(browser.page_source)
browser.close()

练习

接下来爬取小说页面 http://chuangshi.qq.com/bk/xx/AGoEMl1lVjAAOFRjATkBYg-r-1.html
这是创世中文网的一个章节,内容是 JavaScript 生成的

在这里插入图片描述
如果直接用 requests 爬取是不行的

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 设置启动 chrome 时不可见
chrome_options.add_argument('--headless')      
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"')

# browser = webdriver.Firefox()                     # 火狐浏览器
browser = webdriver.Chrome(options=chrome_options)  # 谷歌浏览器
browser.get("http://chuangshi.qq.com/bk/xx/AGoEMl1lVjAAOFRjATkBYg-r-1.html")
html = browser.page_source

with open('practise.txt','w',encoding='utf-8') as f:
    f.write(html)
    
browser.close()

在这里插入图片描述

待解决的问题

  • 再次爬取上面的网站后不会出现内容
    在这里插入图片描述

解决方法: 延时等待

  • 隐式等待

    from selenium import webdriver
    with webdriver.Chrome() as browser:
        browser.implicitly_wait(10)
    
  • 显示等待

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    with webdriver.Chrome() as browser:
        browser.get("http://chuangshi.qq.com/bk/xx/AGoEMl1lVjAAOFRjATkBYg-r-1.html")
        wait = WebDriverWait(browser,10)
        wait.until(EC.presence_of_element_located((By.XPATH,"//div[@class='bookreadercontent']/p")))
        content = browser.find_elements_by_xpath("//div[@class='bookreadercontent']/p")
        for c in content:
            print(c.text)
    
  • time.sleep(2)

猜你喜欢

转载自blog.csdn.net/weixin_44018458/article/details/109144848