关于爬虫部分一些建议:
尽量减少请求次数,能抓列表页就不抓详情页,减轻服务器压力,程序员都是混口饭吃不容易。
不要只看 Web 网站,还有手机 App 和 H5,这样的反爬虫措施一般比较少。
实际应用时候,一般防守方做到根据 IP 限制频次就结束了,除非很核心的数据,不会再进行更多的验证,毕竟成本的问题会考虑到。(代理ip)
如果真的对性能要求很高,可以考虑多线程(一些成熟的框架如 Scrapy都已支持),甚至分布式...
关于反爬虫部分的一些建议:
携程技术中心 - 携程酒店研发部研发经理崔广宇 <爬虫与反爬虫> 技术分享
1、动态HTML介绍
js,jq,ajax,dhtml
使用了 Ajax 或 DHTML 技术改变 / 加载内容的页面,可能有一些采集手段。但是用 Python 解决这个问题只有两种途径:
- 直接从 JavaScript 代码里采集内容(费时费力)
- 用 Python 的 第三方库运行 JavaScript,直接采集你在浏览器里看到的页面(这个可以有)。模拟浏览器
2、Selenium
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。 模拟浏览器操作Selenium 库里有个叫 WebDriver 的 API。WebDriver 有点儿像可以加载网站的浏览器,但是它也可以像 BeautifulSoup 或者其他 Selector 对象一样用来查找页面元素,与页面上的元素进行交互 (发送文本、点击等),以及执行其他动作来运行网络爬虫。
用Python做爬虫的各位,不要再用PhantomJS了(有解决办法)
selenium webdriver 启动三大浏览器Firefox,Chrome,IE
很强,超级强大!!!
1
#启动谷歌浏览器
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com/')
2
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://cnblogs.com/")
恩,果然python好多库要学习,去 webdriver官网找资料
案例一:网站模拟登录
案例二:动态页面模拟点击
案例三:执行 JavaScript 语句
3、机器视觉
对图片识别,验证码识别,还可以学习,牛叉
import pytesseract
from PIL import Image
image = Image.open('test.jpg')
text = pytesseract.image_to_string(image)
print text