一、网络数据加密:
1. md5 / sha1 不可逆加密算法: 结果是十六进制数, 结果不可逆, 多用于文件验证
import hashlib
md5_obj = hashlib.md5()
sha1_obj = hashlib.sha1()

md5_obj.update("非Unicode字符串")
sha1_obj.update("非Unicode字符串")

md5_obj.hexdigest()
sha1_obj.hexdigest()

2. base64 : 可逆的一种编码方式, 大概样式为: 大小写混合, 斜杠, 最后是等号
import base64
b64data = base64.b64encode() # 对字符串 或 文件数据进行编码
base64.b64decode(b64data) # 对base64数据解码,复原回原本的数据

3. rsa 非对称加密 /aes 对称加密

客户端和服务器端数据加密: 公钥和私钥

4. Unix 时间戳
表示 从 1970年1月1日到现在的总秒数,通常有两种值:
10 位: 单位是秒; 13 位 :单位是毫秒。

秒: int(time.time())
毫秒: int(time.time() * 1000)

二、Requests模块有两种发送请求的方式:

# 普通请求发送方式,不会保存Cookie
requests.get()
requests.post()

# 创建一个可以保存Cookie 的 session对象
ssion = requests.session()
# 通过session对象发送请求,可以记录并传递Cookie
ssion.get()
ssion.post()

三、爬虫的标准模拟登录流程:

模拟登录的目的:为了登录成功并保存Cookie,再用于发送其他需要登录后才能访问的页面请求。

1. 发送登录页面的 get 请求,获取登录参数
2. 发送登录的 post 请求,提交登录参数 和 账户密码,实施模拟登录(如果登录成功则记录Cookie)
3. 附带登录的Cookie,发送其他页面的请求,提取需要的数据。

模拟登录实际开发很少使用(通过Cookie池代理),但是面试会经常问。

代理: 浏览器插件使用代理时, 会弹窗提示需要提供账号密码, 而代码中若没有提供会提示 407错误(requests默认没有使用代理); 免费代理, 无需账号&密码

三、HTML DOM 是HTML的树形结果概念。

  HTML

head    body
title      a p div br 属性值、文本内容、href、 src
meta

lxml/ XPATH

四、XPATH 提取数据定律:

1. xpath表达式的匹配结果,一定是一个列表
匹配成功返回所有数据的列表,没有匹配成功返回空列表

2. xpath表达式提取的数据(属性值字符串、文本值字符串),结果一定是一个Unicode字符串, 注意网页标签中的双引号 空格
url_list = xpath("//div[@id='u1']/a/@href")
text_list = xpath("//div[@id='u1']/a/text()")

3. 如果没有提取数据,返回所有标签结点的对象(Element对象),该对象可以继续调用xpath向下取值。
a_list = xpath("//div[@id='u1']/a")

item_list = []

for a in a_list:
  item = {}
  item['text'] = a.xpath("./p/text()")[0]
  try:
    item['src'] = a.xpath("./img/@src")[0]
  except:
    item['src'] = None

  item['src'] = a.xpath("./img/@src")[0] if a.xpath("./img/@src") else None

  item_list.append(item)  # [{}, {}, {}, {}]

栗子: div//a div下的第二个标签, Xpath语法下标从1开始

xpath : XML Path Language,是一种专门提取xml文档数据的语法。

html : 网页字符串,字符串本身不支持xpath提取数据,所以需要通过lxml转换

lxml : 作用是将html字符串,转换为可以调用xpath方法的 对象lxml.ElementTree

使用xpath取值时, 大型网站会根据不同浏览器返回不同网页内容(依据User-Agent区分), chrome浏览器返回的内容会放在注释中, IE浏览器不会。

# BeautifulSoup4、Pyquery

# 从lxml类库中,导入 etree模块
from lxml import etree

html = requests.get(url).content

# etree模块有个HTML类,接收网页字符串,并返回一个 DOM 对象
html_dom = etree.HTML(html)

# 读取本地文件,并转为 HTML DOM对象
#html_dom = etree.parse("./baidu.html")

# 将DOM对象复原回网页字符串
#html = etree.tostring(html_dom)

# DOM对象可以调用xpath方法,提取网页的数据
url_list = html_dom.xpath("//div[@id='u1'][1]/a/@href")

五、正则

import re

re.match() : 从字符串的第一个字符开始匹配,如果匹配成功返回Match对象,该对象可以通过 group()提取数据。如果第一个字符不符合匹配,则返回 None
re.search():从字符串的第一个字符开始匹配,如果匹配成功返回Match对象,该对象可以通过 group()提取数据。如果第一个字符不符合匹配,继续从第二个开始,直到最后一个字符为止,如果一种没有匹配,则返回 None

注:match 和 search 都只匹配一次

re.findall() : 返回字符串里所有符合匹配的结果,如果匹配成功,返回列表;如果不成功,返回空列表

re.sub("re表达式", "字符串", "替换后的字符") : sub替换字符串指定字符,替换后返回一个新字符
re.split() : 对字符串按指定字符进行分隔,返回分隔后的列表

str <-> list

list = str.split()
str = "".join(list)

str.replace()
str.find()

re.findall(r"\d+", html)
re.findall(r"\d+", html)

pattern = re.compile(r"\d+")
pattern.findall(html)
pattern.findall(html)

r"\d+\n\t":r 忽略Python字符串里的转义字符

import json

# 将python对象转为json字符串
json_str = json.dumps(python_obj)
# 将json字符串转为python对象
python_obj = json.loads(json_str)
# 将python对象转为json字符串 并保存到 文件中
json.dump(python_obj, open("xxx.json", "w"))
# 读取文件的json字符串,并转为对应的Python对象
python_obj = json.load(open("xxx.json", "r"))

Spider-two的更多相关文章

  1. spider RPC入门指南

    本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...

  2. Scrapy:为spider指定pipeline

    当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...

  3. spider RPC过滤器

    spider支持在请求执行前或完成后进行特殊处理,比如安全性检查.敏感字段混淆等等.为此,spider提供了BeforeFilter和AfterFilter.其执行位置如下图所示: 流水线插件配置在s ...

  4. spider RPC插件化体系

    为了满足灵活扩展的需要,spider支持灵活的自定义插件扩展,从功能上来说,插件和过滤器的差别在于过滤器不会阻止请求的执行同时对于主程序不会有API上的影响(比如servlet 过滤器和监听器)(最多 ...

  5. spider RPC管理接口

    为了在独立管理模式下尽可能的容易运行时排查问题,spider中间件提供了一系列restful api用于动态管理当前节点的路由,下游节点等.目前支持的RESTFUL API如下所示: 功能 服务号 R ...

  6. spider RPC高级特性

    多租户 spider原生支持多租户部署,spider报文头对外开放了机构号.系统号两个属性用于支持多租户场景下的路由. 多租户场景下的路由可以支持下述几种模式: n  系统号: n  系统号+服务号( ...

  7. spider RPC安全性

    spider提供了多重安全保障机制,目前主要支持接入握手校验,报文完整性校验,报文加密,报文长度检查四种机制. 接入认证 spider使用两次握手校验,其握手流程如下: 签名AES加密的方式实现. l ...

  8. spider RPC开发指南

    协议与兼容性 spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS系统模式的特性进行针对性和重点设计,以更加灵活和高效的满足多租户系统.高可 ...

  9. spider 配置文件参考

    spider有一个配置文件spider.xml,为xml格式,spider.xml采用DTD进行管理,用于管理spider的所有特性.路由.高可用等. 配置文件支持三种不同的方式进行指定: 1. 通过 ...

  10. spider RPC性能测试报告

    测试环境部署结构 测试用例 类 别 说明 请求报文 194字节({"systemId":"PL","appVersion":"qq ...

随机推荐

  1. [Swift]Alamofire:设置网络请求超时时间【timeout】的两种方式

    两种方式作用相同,是同一套代码的两种表述. 第一种方式:集聚. 直接设置成员属性(全局属性),这种方法不能灵活修改网络请求超时时间timeout. 声明为成员属性: // MARK: - 设置为全局变 ...

  2. Web发展简史(精编故事版,贤来给你讲故事)

    Web发展简史 一. Web发展简史之隔壁老王的故事 有一个人叫隔壁老王,老王有一个爱好就是爱看电影.有一天,这个隔壁老王想看一部电影,可是电脑里面存储的电影太多了,他费了老大劲才从里面找到,觉得很不 ...

  3. Spring 静态代理+JDK动态代理和CGLIB动态代理

    代理分为两种:静态代理 动态代理 静态代理:本质上会在硬盘上创建一个真正的物理类 动态代理:本质上是在内存中构建出一个类. 如果多个类需要进行方法增强,静态代理则需要创建多个物理类,占用磁盘空间.而动 ...

  4. VueJs(13)---过滤器

    过滤器 过滤器 1.过滤器规则 Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方: 双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤 ...

  5. nginx入门教程

    nginx入门教程 一.概述    什么是nginx?   Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器.   什么是反向 ...

  6. select实现高并发服务器

    前言:周末学了两天网络编程,把之前的不懂一些问题基本掌握了,例如TCP状态转换图.close和shutdown函数的区别.select函数等,今天分享给大家. 一.网络编程基础知识 在写代码之前,需要 ...

  7. 提升 PLSQL 开发性能漫谈

    本文内容摘自<剑破冰山--Oracle开发艺术>一书,有删改. 1.触发器尽量考虑内部代码过程封装(解析次数) 2.避免动态 SQL 动态 SQL 和普通 SQL 在执行过程中最大的差别在 ...

  8. MFC控件编程进度条编写

    MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl  进度条编程也很简单. 封装的方法也就那个那几个. GetPos()  获 ...

  9. 【原创】驱动枚举之EnumServicesStatusEx

    BOOL WINAPI EnumServicesStatusEx( _In_ SC_HANDLE hSCManager, _In_ SC_ENUM_TYPE InfoLevel, _In_ DWORD ...

  10. 【原创】uC/OS II 任务切换原理

    今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...