本文档由脑图导出,地址:Spider脑图
参考:heima
[TOC]
Spider
动态HTML处理
爬取动态HTML数据
后续爬虫代码建议
- 减少请求次数
- 关注所有类型的页面
- 多伪装
- 多线程分布式
动态HTML技术:略
Selenium和PhantomJS
Selenium
- Web的自动化测试工具,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏
PhantomJS
- “无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的JavaScript
demo: 模拟浏览器百度搜索
python1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32from selenium import webdriver
import time
import pprint
# 实例化浏览器
# 调用的是本地Chrome浏览器,如果是有界面浏览器,就会看到控制效果
# webdriver.PhantomJS() #无界面浏览器
driver = webdriver.Chrome("./chromedriver")
# 发送请求
driver.get("http://www.baidu.com")
# 输入关键字
driver.find_element_by_id("kw").send_keys("python")
# 点击搜索
driver.find_element_by_id("su").click()
# 获取click之后的url
new_url = driver.current_url
# 获取Cookie
cookies = driver.get_cookies()
print(cookies)
# 字典推导式
cookies = {i["name"]: i["value"] for i in cookies}
print(cookies)
# 获取html字符串
html_str = driver.page_source # 浏览器中elements的内容
time.sleep(5)
# 退出当前页面
driver.close()
# 退出浏览器
driver.quit()
案例-网站模拟登录
模拟登录豆瓣网
打码平台
验证码
- url不变,验证码不变
- url不变,验证码会变
- 使用session1请求,获取验证码地址(这时验证码已经被请了一次 c1),这时后台的session1与c1绑定
- 使用session1请求验证码,识别(这是第二次 c2), 这时session1与c2的验证码在后台绑定了
- session1发送post请求,将c2发到后台。
- 如果:使用request会怎样?2次请求是不同的session,对应不起来
- 另一种方法,截屏,然后截取验证码模块交给打码接口识别
selenium补充
python
1 | from selenium import webdriver |
Tesseract简要
Tesseract
Tesseract是一个将图像翻译成文字的OCR库(光学文字识别,Optical Character Recognition)
安装:
sudo apt-get install tesseract-ocr在python中调用Tesseract:
pip3 install pytesseract终端:
tesseract test.jpg textpy代码:
demo
python1
2
3
4import pytesseract
from PIL import Image
image = Image.open(jpg)
pytesseract.image_to_string(image)
案例-使用selenium爬豆瓣小组
略



