一、反爬策略:
1、请求头:
—user-agent
—referer
—cookie
2、访问频率限制。
—代理池
—再用户访问高峰期进行爬取,冲散日志。12-13 7-10
—设置等待时长。time.sleep(3)
3、ajax异步请求,用接口获取数据。
4、能一次性获取的数据,绝不发送第二次请求(获取数据的过程中尽量减少请求次数。)
5、页面内容是js代码。
selenium+phantomjs的组合进行页面内容的获取。
二、html页面的技术
1、js:
页面在请求html的过程中,服务器返回html,同时还会请求js文件。
2、jqery:js的库,方便js开发。
3、ajax:web的异步请求技术
同步请求,异步请求。
三、selenium和phantomjs
1、什么是selenium?
selenium一个web自动化测试工具。【但是它本身是不带浏览器】。这个工具其实就是作为一些外部工具驱动来使用的,可以控制一些外部应用来完成自动化测试。
2、phantomjs:他其实就是一个内置无界面浏览器引擎。–无界面可以提高程序运行速度。
因为phantomjs是一个浏览器引擎,所以他最大的功能就是执行页面的js代码。
3.安装selenium和phantomjs?
selenium安装:pip install selenium==2.48.0
phantomjs安装:百度phantomjs镜像--->下载一个Windows版本的————>phantomjs-2.1.1-windows.zip
可视化的chrome浏览器插件:---chromedriver安装:
下载:百度:chromedriver镜像
(1)保证chrome是正版。
(2)查看自己chrome的版本号
(3)找一个和自己版本号最接近的版本下载。
一、selenium的三种等待:
1、强制等待:不管页面是否加载出来,强制让进程等待。
time.sleep(2)
2、隐式等待:driver.implicitly_wait(20)
设置20秒的最大等待时长,他等待的结束条件是:等待到浏览器全部加载完成完成为止,全部加载可以理解为,浏览器不在装圈圈。
弊端:页面的加载其实不单单是页面html,重要还有一些页面静态资源,而静态资源的加载是最耗时。这些静态资源对我们爬取数据又没什么作用,所以隐式等待其实效率并不高。
3、显示等待:满足一些内置的等待条件,这要这些条件满足,就等待结束。这些条件比如:特定页面元素加载出来。
创建显示等待的步骤:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
1、创建wait对象:
wait = WebDriverWait(
driver = 作用的哪个驱动,
20,最大等待时长
0.5,每隔多少秒做页面扫描
)
2.在之前selenium使用步骤的等待位置:
wait.until(EC.presence_of_element_located(
locator = 定位器对象。
))--->返回值是一个webelement对象(locator对象所定位的哪个webelement)
定位器对象是一个元组。
locator = (By.xpath,'xpath表达式')
By.ID
By.CSS_SELECTOR
文档:selenium的三种等待.note
链接:http://note.youdao.com/noteshare?id=8f6a0765e4017a4140a05485a9d80a48&sub=48D9761ED13A49EDAC64D180C8340613