动态HTML
爬虫跟反爬虫
动态HTML介绍
- JavaScrapt
- jQuery
- Ajax
- DHTML
- Python采集动态数据
- 从Javascript代码入手采集
- Python第三方库运行JavaScript,直接采集你在浏览器看到的页面
Selenium + PhantomJS
- Selenium: web自动化测试工具
- PhantomJS(幽灵)
- Selenium 库有有一个WebDriver的API
- WebDriver可以跟页面上的元素进行各种交互,用它可以来进行爬取
- 案例 v36
- chrome + chromedriver
- 下载安装chrome: 下载+安装
- 下载安装chromedriver:
- Selenium操作主要分两大类:
- 得到UI元素
- find_element_by_id
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
- 基于UI元素操作的模拟
- 单击
- 右键
- 拖拽
- 输入
- 可以通过导入ActionsChains类来做到
- 在这里插入代码片案例37
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
# 可能需要手动添加路径
driver = webdriver.Chrome()
url = "http://www.baidu.com"
driver.get(url)
text = driver.find_element_by_id('wrapper').text
print(text)
print(driver.title)
# 得到页面的快照
driver.save_screenshot('index.png')
# id="kw" 的是百度的输入框,我们得到输入框的ui元素后直接输入“大熊猫"
driver.find_element_by_id('kw').send_keys(u"大熊猫")
# id="su"是百度搜索的按钮,click模拟点击
driver.find_element_by_id('su').click()
time.sleep(5)
driver.save_screenshot("daxiongmao.png")
#获取当前页面的cookie
print(driver.get_cookies())
# 模拟输入两个按键 ctrl+ a
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
#ctr+x 是剪切快捷键
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'x')
driver.find_element_by_id('kw').send_keys(u'航空母舰')
driver.save_screenshot('hangmu.png')
driver.find_element_by_id('su').send_keys(Keys.RETURN)
time.sleep(5)
driver.save_screenshot('hangmu2.png')
# 清空输入框 , clear
driver.find_element_by_id('kw').clear()
driver.save_screenshot('clear.png')
# 关闭浏览器
driver.quit()