第十章 采集JavaScript

10.1 JavaScript简介

常用JavaScript库

jQuery

Google Analytics

10.2 Ajax和动态HTML

  • 如果提交表单之后,或从服务器获取信息之后,网站的页面不需要重新刷新,那么你访问的网站就在用 Ajax 技术。

在Python中用Selenium执行JavaScript

  • Selenium是一个强大的网络数据采集工具
  • Selenium 自己不带浏览器,它需要与第三方浏览器结合在一起使用
  • 用一个叫 PhantomJS的工具代替真实的浏览器

  • 把 Selenium 和 PhantomJS 结合在一起,就可以运行一个非常强大的网络爬虫了,可以处理 cookie、JavaScrip、header,以及任何你需要做的事情。

1
2
3
4
5
6
7
8
from selenium import webdriver
import time

driver = webdriver.PhantomJS(executable_path='/usr/local/phantomjs/bin/phantomjs')
driver.get('http://pythonscraping.com/pages/javascript/ajaxDemo.html')
time.sleep(3)
print(driver.find_element_by_id('content').text)
driver.close()
Here is some important text you want to retrieve!
A button to click!
  • Selenium 的选择器

find_element_by_id

find_element_by_css_selector

find_element_by_tag_name

另外,如果你还是想用 BeautifulSoup 来解析网页内容,可以用 WebDriver 的 page_source 函数返回页面的源代码字符串。

pageSource = driver.page_source

bsObj = BeautifulSoup(pageSource)

print(bsObj.find(id=”content”).get_text())

1
2
3
4
5
6
7
8
9
10
11
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.PhantomJS(executable_path='/usr/local/phantomjs/bin/phantomjs')
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()
Here is some important text you want to retrieve!
A button to click!
分享到