目录
爬虫和反爬虫的斗争
爬虫建议
(1)尽量减少请求次数,保存或取的HTML,供查错和重复使用;
(2)关注网站的所有类型的页面,H5页面,APP等等;
(3)设置多伪装,代理IP,随即请求头等;
(4)利用多线程分布式,再不被发现的情况下我们尽可能提高速度。
ajax基本介绍
动态了解HTML技术
(1)JS:是网络上最常用的脚本语言,它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页;
(2)jQuery:jQuery是一个快速,简介的JavaScript框架,封装了JavaScript常用的功能代码;
(3)ajax:ajax可以使用网页实现异步更新,可以在不重新加载整个页面的情况下,对页面的某部分进行更新。
获取ajax数据的方式
(1)直接分析ajax调用的接口。然后通过代码请求这个接口;
(2)使用Selenium+chromedriver模拟浏览器行为获取数据;
一.Selenium+chromedriver
Selenium介绍
1.selenium是一个web的自动化测试工具,最初是为网站自动化测试而开发的,selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接受指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。
2.chromedriver是一个驱动Chorme浏览器的驱动程序,使用它才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:
(1)Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads
(2)Firefox:Releases · mozilla/geckodriver · GitHub
(3)Edge:Microsoft Edge Driver - Microsoft Edge Developer
(4)Safari:WebDriver Support in Safari 10 | WebKit
- 下载chromedriver
- 百度搜索:淘宝镜像(npmmirror 中国镜像站)
- 安装总结:Selenium 入门教程(Python) - 简书
- 安装
Selenium
:pip install selenium
- 新的chromedriver 第地址 http://chromedriver.storage.googleapis.com/index.html
Phantomjs快速入门
无头浏览器:一个完整的浏览器内核,包含js解析引擎,渲染引擎,请求处理等,但是不包含显示和用户的页面的浏览器。
Phantomjs案例
# 1.加载网页
from selenium import webdriver
driver = webdriver.PhantomJS("安装目录")
driver.get("https://www.baidu.com")
driver.save_screenshot("baidu.png")
# 2.定位和操作
driver.find_element_by_id("kw").send_keys("长城")
driver.find_element_by_id("su").click()
# 3.查看请求信息
driver.page_source
driver.get_cookies()
driver.current_url
# 4.退出
driver.quit()
注意:在新版的selenium中没有Phantomjs,所以这里不做更多的解释。
selenium快速入门
from selenium import webdriver
# 实例化浏览器
driver = webdriver.Chrome()
# 发送请求
driver.get('https://www.baidu.com')
# 退出浏览器
driver.quit()
定位元素
(1)find_element_by_id:根据id查找某个元素:
submitTag = driver.find_element_by_id('su')
submitTag1 = driver.find_element(By.ID,'su')
(2)find_element_by_class_name:根据类名查找某个元素:
submitTag = driver.find_element_by_class_name('su')
submitTag1 = driver.find_element(By.CLASS_NAME,'su')
(3)find_element_by_name:根据name属性值查找某个元素:
submitTag = driver.find_element_by_name('email')
submitTag1 = driver.find_element(By.NAME,'email')
(4)find_element_by_tag_name:根据标签名查找某个元素:
submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')
(5)find_element_by_xpath:根据xpath语法查找某个元素:
submitTag = driver.find_element_by_xpath('//div')
submitTag1 &#