Python爬虫利器之PhantomJS

PhantomJS是一个基于WebKit的无头浏览器,它没有图形界面,但是它可以像传统的浏览器一样访问web页面,并返回已呈现的内容。PhantomJS是一种命令行工具,可以用它来测试和爬取Web页面。

在PhantomJS中,我们需要使用JavaScript脚本来控制页面。我们可以查询页面元素,截取屏幕截图,或执行JavaScript命令来修改页面的内容。在PhantomJS中,我们使用了各种JavaScript库,来控制和对页面进行操作。

PhantomJS和Python的结合

在Python中,我们可以使用selenium-webdriver库来控制PhantomJS。selenium是一个用于Web控制器和自动化测试的非常流行的库,它支持多种浏览器,包括Firefox,Chrome,PhantomJS等。

当我们使用PhantomJS时,我们需要定义要访问的URL,并创建一个webdriver实例。我们可以使用该实例来控制页面的访问,并返回页面HTML。以下是一个简单的示例程序,演示如何使用selenium-webdriver和PhantomJS来访问Web页面:

from selenium import webdriver

url = "https://example.com"

driver = webdriver.PhantomJS()
driver.get(url)

print(driver.page_source.encode("utf-8"))

driver.quit()

在上面的程序中,我们首先定义一个要访问的URL,然后我们创建一个PhantomJS的webdriver实例,并使用get()函数打开该URL。我们使用driver.page_source来获取页面的HTML,并将其打印出来。最后,我们使用driver.quit()函数来退出webdriver实例,关闭PhantomJS。

我们还可以使用selenium来查找页面中的元素,并对其进行操作。以下是一个示例程序,演示如何使用selenium-webdriver和PhantomJS在页面上查找文本输入框,并向其中输入文本:

from selenium import webdriver

url = "https://example.com"

driver = webdriver.PhantomJS()
driver.get(url)

search_box = driver.find_element_by_name("q")
search_box.send_keys("test")
search_box.submit()

print(driver.page_source.encode("utf-8"))

driver.quit()

在上面的程序中,我们定义了一个要搜索的关键字(test),然后创建一个PhantomJS实例,打开指定的URL。我们使用find_element_by_name()函数来查找名为“q”的文本输入框,然后使用send_keys()函数向其中输入我们定义的关键字,并使用submit()函数提交搜索表单。最后,我们使用driver.page_source来获取搜索结果的HTML,并打印出来。

使用PhantomJS进行数据抓取

PhantomJS非常适合用于数据抓取,特别是对动态网页的数据抓取。在数据抓取领域中,数据抓取技术是一项非常常见的任务,它可以使我们从网站上获取信息并将其用于其他目的。

在使用PhantomJS进行数据抓取时,我们可以使用selenium-webdriver与PhantomJS结合使用来获取页面HTML,并使用BeautifulSoup等Python库来解析HTML并提取我们需要的数据。

以下是一个简单的示例程序,演示如何使用PhantomJS和Python来获取新浪新闻的头条新闻:

from selenium import webdriver
from bs4 import BeautifulSoup

url = "http://news.sina.com.cn/"

driver = webdriver.PhantomJS()
driver.get(url)

soup = BeautifulSoup(driver.page_source, "html.parser")
headlines = soup.find_all("a", class_="news-item")

for headline in headlines:
    print(headline.text)

driver.quit()

在上面的程序中,我们首先定义一个要抓取的新浪新闻页面的URL,并创建一个PhantomJS实例来获取页面HTML。我们使用BeautifulSoup库来解析页面HTML,并使用`find_all()`函数查找所有的头条新闻链接。最后,我们使用一个for循环来遍历所有的头条新闻链接,并打印出它们的文本(新闻标题)。

使用PhantomJS进行Web自动化测试

PhantomJS还可以用于Web自动化测试,它帮助我们模拟用户在浏览器中的行为,并自动完成测试任务。在这种情况下,我们通常使用selenium-webdriver与PhantomJS结合使用,来模拟用户在浏览器中的行为。

以下是一个简单的示例程序,演示如何使用selenium-webdriver和PhantomJS来测试一个Web页面中的登录功能:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = "https://example.com/login"

driver = webdriver.PhantomJS()
driver.get(url)

username_box = driver.find_element_by_name("username")
password_box = driver.find_element_by_name("password")
submit_button = driver.find_element_by_name("submit")

username_box.clear()
username_box.send_keys("testuser@gmail.com")

password_box.clear()
password_box.send_keys("mypassword")

submit_button.click()

assert "Welcome, testuser!" in driver.page_source

driver.quit()

在上面的程序中,我们首先定义一个要测试的Web页面的URL,并创建一个PhantomJS实例,打开该URL。我们使用find_element_by_name()函数来查找用户名和密码输入框,然后使用clear()send_keys()函数分别向它们输入我们定义的用户名和密码。我们还使用click()函数来模拟提交表单的点击操作。最后,我们使用assert函数来检查页面是否包含打招呼的欢迎消息,并使用driver.quit()来退出PhantomJS实例。

总结

在本文中,我们介绍了如何使用Python和PhantomJS进行Web自动化测试和数据抓取。我们讨论了PhantomJS的基础知识,以及如何使用selenium-webdriver与PhantomJS结合使用。我们还演示了一些简单的示例程序,来说明如何在Python中使用PhantomJS。希望这篇文章对你有所帮助!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
需要的添加的jar包及工具:我这里使用maven来构建项目,添加依赖如下:   org.seleniumhq.selenium   selenium-java   3.2.0    PhantomJs工具到官网去下载:http://phantomjs.org/download.html 尽量都使用最新版本,不然会出现版本兼容的情况。 这里有一个已经写好的获取PhantomJSDriver的工具类 public static WebDriver getPhantomJs() {   String osname = System.getProperties().getProperty("os.name");   if (osname.equals("Linux")) {//判断系统的环境win or Linux     System.setProperty("phantomjs.binary.path", "/usr/bin/phantomjs");   } else {     System.setProperty("phantomjs.binary.path", "./phantomjs/win/phantomjs.exe");//设置PhantomJs访问路径   }   DesiredCapabilities desiredCapabilities = DesiredCapabilities.phantomjs();   //设置参数   desiredCapabilities.setCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");   desiredCapabilities.setCapability("phantomjs.page.customHeaders.User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:50.0) Gecko/20100101   Firefox/50.0");   if (Constant.isProxy) {//是否使用代理     org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();     proxy.setProxyType(org.openqa.selenium.Proxy.ProxyType.MANUAL);     proxy.setAutodetect(false);     String proxyStr = "";     do {       proxyStr = ProxyUtil.getProxy();//自定义函数,返回代理ip及端口     } while (proxyStr.length() == 0);     proxy.setHttpProxy(proxyStr);     desiredCapabilities.setCapability(CapabilityType.PROXY, proxy);   }   return new PhantomJSDriver(desiredCapabilities); } 获取方式     try{     WebDriver webDriver = PhantomJsUtil.getPhantomJs();     webDriver.get(url);     SleepUtil.sleep(Constant.SEC_5);     PhantomJsUtil.screenshot(webDriver);     WebDriverWait wait = new WebDriverWait(webDriver, 10);     wait.until(ExpectedConditions.presenceOfElementLocated(By.id(inputId)));//开始打开网页,等待输入元素出现     Document document = Jsoup.parse(webDriver.getPageSource());     //TODO  剩下页面的获取就按照Jsoup获取方式来做   }finally{     if (webDriver != null) {       webDriver.quit();     }   } python版使用webdriver+PhantomJs爬虫使用,参考http://www.cnblogs.com/kuqs/p/6395284.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

然然学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值