Python-爬虫9-动态HTML、Selenium+PhantomJS、验证码、Tesseract

动态HTML

爬虫跟反爬虫

动态HTML介绍

  • JavaScrapt
  • jQuery
  • Ajax
  • DHTML
  • Python采集动态数据
    • 从Javascript代码入手采集
    • Python第三方库运行JavaScript,直接采集你在浏览器看到的页面

Selenium + PhantomJS

  • Selenium: web自动化测试工具
    • 自动加载页面
    • 获取数据
    • 截屏
    • 安装: pip install selenium==2.48.0
    • 官网: http://selenium-python.readthedocs.io/index.html
  • PhantomJS(幽灵)
    • 基于Webkit 的无界面的浏览器
    • 官网: http://phantomjs.org/download.html
  • Selenium 库有有一个WebDriver的API
  • WebDriver可以跟页面上的元素进行各种交互,用它可以来进行爬取
'''
通过webdriver操作巴蒂进行查找1
'''

from selenium import webdriver
import time


# 通过Keys模拟键盘
from selenium.webdriver.common.keys import  Keys

# 操作哪个浏览器就对哪个浏览器建一个实例
# 自动按照环境变量查找相应的浏览器
driver = webdriver.PhantomJS()

# 如果浏览器没有在相应环境变量中,需要指定浏览器位置


driver.get("http://www.baidu.com")


# 通过函数查找title标签
print("Title: {0}".format(driver.title))
  • 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类来做到
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()

验证码问题

  • 验证码:防止机器人或者爬虫

  • 分类:

    • 简单图片
    • 极验,官网:https://www.geetest.com
    • 12306
    • 电话
    • Google验证
  • 验证码破解

    • 通用方法:
      • 下载网页和验证码
      • 手动输入
    • 简单图片
      • 使用图像识别软件或者文字识别软件
      • 可以使用第三方图像验证码破解网站,http://www.chaojiying.com/
    • 极验:
      • 破解比较麻烦
      • 可以模拟鼠标的移动等
      • 一直在进化
    • 12306
      • 放弃
    • 电话:语音识别软件+降噪软件
    • google

Tesseract

  • 机器视觉领域的基础软件
  • OCR:OpticalCharacterRecognition,光学文字识别
  • Tesseract:一个orc库,由Google资助
  • 安装:
  • 安装完成后需要pytesseract
    • pip install pytesseract

你可能感兴趣的:(Python全栈学习,#,Python爬虫,Python,爬虫,selenium,PhantomJS,Tesseract)