爬虫----selenium+PhantomJS

1. 为啥用?

当一个网站的反扒机制做的很好,需要耗费大量精力去研究,而且对数据爬取速度没太紧的时间要求时,可以通过selenium测试工具和phantomjs无界面浏览器结合,通过模拟正常的浏览器访问来获取数据。其缺点时运行速度慢。

2.快速使用

  • 1.安装运行环境
    • pip install selenium
    • 下载phantomjs浏览器

    1. 简单快速使用
    from selenium import webdriver

    #配置了path时启动phantomjs及其路径。
    dirver=webdriver.PhantomJS('../phantomjs-2.1.1-windows/bin/phantomjs.exe')
    #也可以配置path来实现配置路径。
    #爬取网页
    dirver.get('http://www.baidu.com')

    #1.网页截图结果
    dirver.save_screenshot('baidu1.png')

    #2.保存访问的源代码
    with open('baidu1.html','w') as f:
        f.write(dirver.page_source.encode('utf-8'))
    1. 获取页面后的其他操作

    获取页面,找到输入框,输入搜索词语
    keyword=dirver.find_element_by_id('kw')
    keyword.send_keys(u'火车票')

    点击搜索按钮,搜索
    btn=dirver.find_element_by_id('su').click()

    当网页里包含网页时切换到小网页
    driver.switch_to.frame("login_frame")

    登录表单中填写数据
    driver.find_element_by_id("username").send_keys(u'156')
    driver.find_element_by_id("password").send_keys(u'D6')

    按标签查找
    btn = driver.find_element_by_css_selector("#fm1")

3.验证码问题

有些网站登录需要验证码,此时可以选择第三方打吗平台或者使用机器学习识别图片模块
这里使用Tesseract-OCR图片识别。

    1. 安装软件Tesseract-OCR
      安装时选好语言包,一般英文数字识别较好,中文较差。
    1. 安装 Python 的 pytesseract 模块
      因为是图片识别,还需确认是否有pillow模块。

代码实现

    # 引入机器学习模块
    import pytesseract

    # 引入图形处理模块
    from PIL import Image

    #引入一张图片
    img=Image.open('bb.png')
    #设置指定Tesseract-OCR安装的路径。
    tessdata_dir_config = '--tessdata-dir "D:\\Tesseract-OCR\\tessdata"'

    # 识别图片
    text = pytesseract.image_to_string(img,config=tessdata_dir_config)

    print text

遇到的问题:
1.FileNotFoundError: [WinError 2] 系统找不到指定的文件

解决方法:
方法1[推荐]: 将tesseract.exe添加到环境变量PATH中,
方法2: 修改pytesseract.py文件,指定tesseract.exe安装路径tesseract_cmd = 'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe‘
方法3: 在实际运行代码中指定
pytesseract.pytesseract.tesseract_cmd = 'D:\Tesseract-OCR\tesseract.exe'
2.pytesseract.pytesseract.TesseractError: (1, 'Error opening data file \Tesseract-OCR\tessdata/eng.traineddata')
解决方法:
方法1:
将tessdata目录的上级目录所在路径(默认为tesseract-ocr安装目录)添加至TESSDATA_PREFIX环境变量中
例如: C:\Program Files (x86)\Tesseract-OCR
方法2: 在.py文件配置中指定tessdata-dir
tessdata_dir_config = '--tessdata-dir "D:\Tesseract-OCR\tessdata"'
使用时指定config设置
pytesseract.image_to_string(image,config=tessdata_dir_config)

解决这两个问题即可使用了。

推荐阅读更多精彩内容