1. 为啥用?
当一个网站的反扒机制做的很好,需要耗费大量精力去研究,而且对数据爬取速度没太紧的时间要求时,可以通过selenium测试工具和phantomjs无界面浏览器结合,通过模拟正常的浏览器访问来获取数据。其缺点时运行速度慢。
2.快速使用
- 1.安装运行环境
- pip install selenium
- 下载phantomjs浏览器
- 简单快速使用
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'))
-
- 获取页面后的其他操作
获取页面,找到输入框,输入搜索词语
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图片识别。
- 安装软件Tesseract-OCR
安装时选好语言包,一般英文数字识别较好,中文较差。
- 安装软件Tesseract-OCR
- 安装 Python 的 pytesseract 模块
因为是图片识别,还需确认是否有pillow模块。
- 安装 Python 的 pytesseract 模块
代码实现
# 引入机器学习模块
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)
解决这两个问题即可使用了。