""" 动态渲染页面页面抓取。 JavaScript除了可以Ajax直接获取数据之外,还可以通过计算生成,加密参数等形式 来更安全的获取数据。这些通过特别处理的数据我们很难找出规律直接Ajax去获取。 为了解决这些问题,我们可以直接使用模拟浏览器运行的方式来请求数据,这样可以 看到的是什么,抓取的源码就是什么,也可以避免去分析Ajax接口到底有什么参数。 Python提供的模拟浏览器运行的库:Selenium、Splash、PyV8等 """ """Selenium的用法解析 支持的浏览器Chrome、Firefox、PhantomJS还有Android、BlackBerry等手机端浏览器: browser = webdriver.Chrome() browser = webdriver.Firefox() browser = webdriver.Edge() browser = webdriver.PhantomJS() https://selenium-python.readthedocs.io/api.html webdriver的API解释 """ from selenium import webdriver # 可选择的浏览器 from selenium.webdriver.common.by import By # 选择器方法 from selenium.webdriver.common.keys import Keys # 键盘按键对应表 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait # 声明浏览器对象并将其赋值为browser browser = webdriver.Chrome() try: # 调用get()方法请求网页 browser.get("https://www.baidu.com") # 调用find_element_by_id()方法查找输入节点ID input = browser.find_element_by_id("kw") # WebElement类型结果。调用此类下的send_keys()方法输入查找关键字 input.send_keys("Python") # 调用send_keys()输入键盘ENTER键 input.send_keys(Keys.ENTER) # 传入webdriver实例browser和超时时间 wait = WebDriverWait(browser, 10) # until()方法确认请求的结果不是False。presence_of_element_located()方法检查DOM上是否存在查询的该元素 wait.until(EC.presence_of_element_located((By.ID, "content_left"))) # 请求成功之后分别打印返回的当前url、cookies、网页源代码 print(browser.current_url) print(browser.get_cookies()) print(browser.page_source) finally: # 最后关闭浏览器 browser.close()
相关文章: