python爬虫学习第三十三天

今天的主要内容:在Python中用Selenium执行JavaScript

后面练习中可能用到的知识点,概念或工具:
Selenium:

Selenium是一个强大的网络数据采集工具,其最初是为网站自动化测试而开发的。近几年,它还被广泛用于获取精确的网站快照,因为它们可以直 接运行在浏览器上。Selenium 可以让浏览器自动加载页面,获取需要的数据,甚至页面截 屏,或者判断网站上某些动作是否发生。

PhantomJS

PhantomJS 是一个“无头” (headless)浏览器。它会把网站加载到内存并执行页面上的JavaScript,但是它不会向用户展示网页的图形界面。把 Selenium 和 PhantomJS 结合在一 起,就可以运行一个非常强大的网络爬虫了,可以处理 cookie、JavaScrip、header,以及 任何你需要做的事情。

Selenium 的选择器

Selenium 在 WebDriver 的 DOM 中使用了全新的选择器来查找元素,不过它们 都使用非常直截了当的名称
find_element_by_id
find_element_by_tag_name
find_element_by_css_selector

练习 使用selenium配合PhantomJS捕获带有AJAX的页面

from selenium import webdriver 
import time 
driver = webdriver.PhantomJS(executable_path='...') 
driver.get("http://pythonscraping.com/pages/javascript/ajaxDemo.html") 
time.sleep(3) 
print(driver.find_element_by_id('content').text) driver.close() 

上面这段代码可以捕获AJAX墙后面的内容
依据你的PhantomJS 安装位置,在创建新的PhantomJS WebDriver的时候,你需要在Selenium的WebDriver接入点指明PhantomJS可执行文件的路径

上面的程序产生如下输出:

Here is some important text you want to retrieve!
A button to clic!!!

需要注意的是,虽然页面里有一个元素是 HTML 按钮,但是 Selenium 的 .text 函数可以 获取按钮的文本内容,就像它获取页面上其他元素内容的方式一样

如果 time.sleep 的暂停时间由三秒改成一秒,那么上面程序采集的文本就会变成

This is some content that will appear on the page while it’s loading. You don’t care about scraping this.

练习 等待一个元素出现后在执行后面的内容

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver

driver = webdriver.PhantomJS(executable_path="...")
driver.get("http://pythonscraping.com/pages/javascript/ajaxDemo.html")
try:
    element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,"loadedButton")))
finally:
    print(driver.find_element_by_id("content").text)
    driver.close()

得到的输出与上面的第一种情况相同,但不同的是这一次我们不用自主的估测网站加载的速度,这种方法显然更合理。

今天先到这里,由于下载PantomJS花了一些时间,今天没看多少,打个卡把~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值