数据的采集与解析
- 下载数据 - urllib / requests / aiohttp。
- 解析数据 - re / lxml / beautifulsoup4(bs4)/ pyquery。
- 缓存和持久化 - pymysql / redis / sqlalchemy / peewee / pymongo。
- 序列化和压缩 - pickle / json / zlib。
- 调度器 - 进程 / 线程 / 协程。
BeautifulSoup的使用
- find / find_all:字符串、正则表达式、列表、True、函数或Lambda。
- select_one / select:CSS选择器
隔离级别
- 由低到高
- uncommitted read 读未提交, 性能最好,但会有脏数据(Dirty Read)
- read committed - 提交后可读 不会有脏数据, 但会有不可重复读(Unrepeatable Read)
- repeatable read - 可重复读数据 但会有幻读(Phantom Read)
- serializable
- 由低到高 隔离性越好,但性能越低
- 查看数据库的隔离级别的命令
- select @@tx_isolation;
- 在全局修改事物隔离级别,这里设置为读级别
- set global transaction isolation level read committed;
- 临时修改隔离级别,这里设置的是最高级别
- set session transaction isolation level serializable;
摘要
- MD5 32个字节, SHA1 48个字节, SHA256 64个字节
import hashlib
# 创建一个md对象, 同样可以创建sha1 ,sha256对象
hasher = hashlib.md5()
link = 'hello'
# 将link的内容变成字节再对其进行摘要
hasher.update(link.encode('utf-8'))
# 提取摘要结果
hasher.hexdigest()
数据储存
- 序列化/反序列化
- 序列化的三种工具 pickle / json / shelve
- pickle : 可以将数据变成字节
- json: dump /dumps / load / loads
- 序列化-把对象变成字符或者字节序列
反序列化-把字符或者字节序列还原成对象
数据压缩
- 需要先将数据序列化才可以进行数据压缩
- zlib
- compress(data) 压缩数据
- decompress 解压缩
import hashlib
from urllib.error import URLError
from urllib.request import urlopen
import re
import pymysql
import ssl
# 通过指定的字符集对页面进行解码(不是每个网站都将字符集设置为utf-8)
def decode_page(page_bytes, charsets=('utf-8',)):
page_html = None
for charset in charsets:
try:
page_html = page_bytes.decode(charset)
break
except UnicodeDecodeError:
pass
# logging.error('Decode:', error)
return page_html
# 获取页面的HTML代码(通过递归实现指定次数的重试操作)
def get_page_html(seed_url, *, retry_times=3, charsets=('utf-8',)):
page_html = None
try:
if seed_url.startswith('http://') or seed_url.startswith('https://'):
page_html = decode_page(urlopen(seed_url).read(), charsets)
except URLError:
# logging.error('URL:', error)
if retry_times >