1.python数据分析库有哪些
2.python绘制图表库有哪些
3.echarts绘制饼状图 柱状图 折线图
4.pyecharts绘制饼状图 柱状图 折线图
5.动态生成sql语句
6.如何获取一个对象的类名
7.基于sql的数据分析
8.爬虫和反爬虫和反反爬虫
分布式爬虫(scrapy-redis)案例参考2019-8-21笔记
1.python数据分析库有哪些
# python的数据分析库
# pandas https://www.yiibai.com/pandas/python_pandas_quick_start.html
# numpy
# import pandas as pd
# import numpy as np
#
# pd.read_clipboard()
# pd.read_csv()
# pd.read_excel()
# pd.read_html()
# pd.read_json()
2.python绘制图表库有哪些
# python的图表绘制
# matplotlib https://morvanzhou.github.io/tutorials/data-manipulation/plt/1-1-why/
# echarts 属于百度公司 https://echarts.baidu.com/
# pyecharts 用python对echarts做了个封装 http://pyecharts.herokuapp.com/
# turtle https://www.cnblogs.com/zxysaigao/p/8465839.html
# seaborn http://seaborn.pydata.org/examples/many_facets.html
# snapshot
3.echarts绘制饼状图 柱状图 折线图
echarts使用步骤
第一步.
用第四种 进入cdnis
粘到head中
第二步:
第三步
下面是两个实例
绘制柱状图:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 1.引用js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.2.1/echarts.min.js"></script>
</head>
<body>
<!-- 2.为 ECharts 准备一个具备大小(宽高)的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
</body>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
title: {
text: '工作数量对比'
},
dataset: {
source: [
['product', 'python', 'php'],
['一月', 43.3, 85.8],
['二月', 83.1, 73.4],
['三月', 86.4, 65.2],
]
},
tooltip: {},
legend: {},
xAxis: {type: 'category'},
yAxis: {},
series: [
{type: 'bar'},
{type: 'bar'},
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
</html>
绘制折线图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.2.1/echarts.min.js"
integrity="sha256-XNiBJGZuErA+MsbKwxuTqNMimobZMsVS79SkTUroRz4=" crossorigin="anonymous"></script>
</head>
<body>
<div id="main" style="width: 800px;height:600px;"></div>
</body>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'));
var option = option = {
title: {
text: '折线图堆叠'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['python', 'php', 'java']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['周一', '周二', '周三']
},
yAxis: {
type: 'value'
},
series: [
{
name: 'python',
type: 'line',
stack: '总量',
data: [120, 132, 101]
},
{
name: 'php',
type: 'line',
stack: '总量',
data: [220, 182, 191]
},
{
name: 'java',
type: 'line',
stack: '总量',
data: [150, 232, 201]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
</html>
4.pyecharts绘制饼状图 柱状图 折线图
首先安装pyecharts
pip install pyecharts==0.5.5
以下是三个实例
柱状图:
from pyecharts import Bar
bar =Bar("工作数量对比", "python和php")
bar.add("python", ["1月", "2月", "3月"], [5, 20, 36])
bar.add("php", ["1月", "2月", "3月"], [5, 20, 36])
# bar.show_config()
bar.render("py柱状图.html")
折线图
扫描二维码关注公众号,回复:
11409104 查看本文章
from pyecharts import Line
attr = ["1月", "2月", "3月", "4月"]
v1 = [5, 20, 36, 10]
v2 = [55, 60, 16, 20]
v3 = [10, 50, 40, 90]
line = Line("折线图示例")
line.add("python", attr, v1)
line.add("php", attr, v2)
line.add("java", attr, v3)
line.render("py折线图.html")
饼状图
from pyecharts import Pie
attr =["python", "php", "java"]
v1 =[100, 120, 60]
pie = Pie("饼图示例")
pie.add("", attr, v1, is_label_show=True)
pie.render("py饼状图.html")
5.动态生成sql语句
import sqlite3
class SqlitePipeline(object):
def __init__(self, db_name):
if not db_name:
db_name = "db"
self.db = sqlite3.connect(f"{db_name}.sqlite")
self.cursor = self.db.cursor()
# 加载配置,获取custom_settings设置的字段,这里获取的是DB_NAME
@classmethod
def from_settings(cls, settings):
db_name = settings['DB_NAME']
return cls(db_name)
def close_spider(self, spider):
self.cursor.close()
self.cursor = None
self.db.close()
self.db = None
def process_item(self, item, spider):
create_table_last_part = ""
lie_list = []
value_list = []
for key, value in item.items():
if isinstance(value, int):
value_type = "INTEGER"
elif isinstance(value, str):
value_type = "VARCHAR(255)"
elif isinstance(value, float):
value_type = "FLOAT"
elif isinstance(value, list):
value_type = "VARCHAR(255)"
value = value[0]
if "url" in key:
value_type += " UNIQUE"
create_table_last_part += f"{key} {value_type},"
lie_list.append(key)
value_list.append(value)
sql1 = f"""
CREATE TABLE IF NOT EXISTS {type(item).__name__} (
id INTEGER PRIMARY KEY AUTOINCREMENT,
{create_table_last_part[:-1]}
)
"""
self.cursor.execute(sql1)
try:
sql1 = f"""INSERT INTO {type(item).__name__} ({",".join(lie_list)}) VALUES ({("?,"*len(lie_list))[:-1]})"""
self.cursor.execute(sql1, value_list)
self.db.commit()
except Exception as e:
print("插入失败!数据重复",e)
return item
6.如何获取一个对象的类名
7.基于sql的数据分析
import sqlite3
db = sqlite3.connect("job51.sqlite")
cursor = db.cursor()
# 统计数据中有多少个城市
sql1 = """
SELECT job_city FROM Job51Item GROUP BY job_city;
"""
# 统计工作数量
sql1 = """
SELECT COUNT(*) FROM Job51Item;
"""
# 统计数据中每个城市有多少工作数量
sql1 = """
SELECT COUNT(*), job_city FROM Job51Item GROUP BY job_city;
"""
# 统计某个城市的工作种类和其对应的数量,以上海为例
sql1 = """
SELECT COUNT(*), job_city, job_type FROM Job51Item WHERE job_city='上海' GROUP BY job_type ;
"""
# 统计上海c++每天的岗位数量变化
sql1 = """
SELECT COUNT(*), job_city, job_type,job_date FROM Job51Item WHERE job_city='上海' AND job_type='c++' GROUP BY job_date ;
"""
# 用柱状图表示每个城市每个语言工作数量的对比情况
#
cursor.execute(sql1)
result = cursor.fetchall()
print(result)
cursor.close()
db.close()
cursor=None
db=None
8.爬虫和反爬虫和反反爬虫
# 爬虫:工程师写脚本去采集对方的数据的行为
# 反爬虫:对方想尽办法不让我用脚本采集的行为
# 反反爬虫:工程师想尽办法突破对方的设置采集了对方数据的行为
# 爬虫必将胜利,不过是时间关系
# 反爬虫技巧
# 1. 检测User-Agent是否为浏览器
# 2. 检测IP的访问频率
# 3. 检测Cookie中的字段
# Cookie由服务器生成,浏览器存储
# 4. 验证码(随机)
# 5. 参数进行js动态加密
# 6. 字体加密
# 反反爬虫技巧
# 1. 手动构造请求头,设置User-Agent
# 2. 设置Download_Delay=2
# 3. 禁用Cookie/手动粘贴Cookie访问
# 4. 捕获验证码的条件(云打码、OCR光学识别、手动验证、github搜索破解方式)
# 验证码类型
# 1) 图片滑动 2)数字字母混合 3)输入表达式结果
# 4) 点击对应图案 5) 类似12306的验证码
# 5. 分析网页,找到js文件,使用pyexecjs模拟js加密
# 6. 找到对应的ttf文件,研究编码
# 爬虫技巧
# 1. 爬取app 比 爬取web 要简单
# 2. 如果请求(http/https)看不到,则可能是基于socket的请求
# 3. 常用的抓包工具(charles/fiddler)只能抓取http/https
# wireshark可以抓取任意请求
# mitmproxy 抓取手机请求的框架
# 4. 模拟浏览器行为来抓取请求
# python:selenium
# nodejs: puppeteer
# 5. 可视化爬虫
# gerapy:分布式爬虫管理框架
# InfluxDb+Grafana
# 6. app安装包的反编译(安卓比苹果简单)
# 面试题
# 如果分布式爬虫中有两台电脑死机或没有爬虫,如何监控?
# 类似于点名,定时检索每台电脑是否存活
# 每台电脑定时通过redis发送特定消息证明电脑存活,否则报警
# 定时任务(time)