Python爬虫-scrapy基本使用
创建工程:scrapy startproject project_name
切换到工程目录后创建爬虫文件:scrapy genspider spider_name www.xxx.com
执行工程:scrapy crawl spiderName。若要省去输出的繁杂日志,可在settings.py文件中追加LOG_LEVEL="ERROR"只输出错误信息。
爬虫示例
前提:
若要突破robots.txt限制,则将settings.py文件中的ROBOTSTXT_OBEY设为False。
UA伪装在settings.py的USER_AGENT设置。
目标:爬取B站当天排行榜内容。
1234567891011121314151617import scrapyclass Spider1Spider(scrapy.Spider): name = 'spider1' # 允许爬取的域名列表 allowed_domains = ['www.bilibili.com'] # 要爬取的URL列表 ...
Python爬虫-scrapy框架安装
Mac or Linux: pip install scrapy
Windows:
pip install wheel
下载twisted:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
切换到twisted下载的目录后:pip install
pip install pywin32
pip install scrapy
Python进阶语法-协程
介绍
协程(Coroutine):被使用的方式类似于子程序的使用,但它可被中断转而执行另外一个子程序(类似于中断机制)。如主程序main有子程序A和B。协程使得A可被打断转而执行B。A、B之间类似多线程(实际不是)并发的关系。
特点
极高的执行效率。因为协程之间更类似子程序之间的切换而不是线程切换,其是由程序自身控制的,因此,没有线程切换的开销。和多线程相比,线程数量多的情况下,协程的性能优势非常明显。
无多线程的锁机制。多协程并发运行,实际只有一个线程,不存在同时写变量的冲突,在协程中控制共享资源不加锁,只需要判断状态,其执行效率比多线程高很多。
asyncio模块
asyncio模块:一个对异步IO进行支持的库。
基本使用:将若干协程组成tasks,放到event_loop里面进行执行。这样便可将tasks里面的若干协程并发执行。
123456789101112131415161718192021import asyncio# 0.定义协程async def hello(name): print("hello " + name) await as ...
Pandas库-常用操作
1234567df.iloc[i]# 第i行数据new_df = df["col_name1", "col_name2", ...]# 返回列col_name1, col_name2, ...df.rename(columns={"old_col": "new_col"})# 对列名重命名df["col1"].max()# 列col1的最大值df["col1"].min()# 列col1的最小值new_df = df.drop_duplicates(subset=['col1', 'col2', ...], inplace=False)# 去除列col1, col2, ...的重复值。inplace若True则就地操作,无返回值。new_col = df["col1"].reindex()# 对col1列重编码,默认从0开始,也可传入特定的Index
Flask-使用前端框架Bootstrap
介绍
Bootstrap是Twitter开发的一个开源Web框架,它提供的用户界面组件可用于快速创建简洁的网页。
Flask-Bootstrap:集成到Flask框架中的Bootstrap模块。(可惜已停止维护,凑活使用吧!)
安装
在Flask项目的虚拟环境下:
pip install flask-bootstrap
预备知识
基模板与衍生模板
基模板中可定义一些用于复用的区块block。衍生模板是继承了基模板的模板,其可直接使用并扩展基模板中的block。
123456789<!--base.html--><html> <head> <!--定义head区块--> {% block head %} <title>Application</title> {% endblock %} </head></html>
12345678910111213<!--衍生模块--> ...
Flask-模板
一个网页可以抽象为表现逻辑和业务逻辑的组合。模板就是用来描述表现逻辑的HTML页面。
表现逻辑:HTML元素+变量占位符(+变量过滤器)+控制结构
变量占位符
1234<p>{{ dic['key'] }}</p> <!--字典访问--><p>{{ list[idx] }}</p> <!--列表访问--><p> {{ obj.method() }} </p> <!--对象方法访问--><p> {{ name|filter }} </p> <!--对变量name的值使用filter过滤器处理-->
变量过滤器
过滤器名
作用
safe
渲染时不进行转义
capitalize
首字母大写,其余小写
lower
转小写
upper
转大写
ti ...
Flask-视图函数处理HTTP请求
**request模块:**request中封存了客户端的一些信息。可将request当全局变量使用。(P16)
指定视图函数接受的HTTP请求类型:@app.route('path', methods=[type1, type2, ...])
123456789101112131415161718from flask import Flask, redirect, url_for, requestapp = Flask(__name__)@app.route('/success/<name>')def success(name): return 'welcome {}'.format(name)@app.route('/login', methods = ['POST', 'GET'])def login(): if request.method == 'POST':#用POST方法请求 user = request.form[ ...
Flask-HelloWorld
基础结构:
应用实例化
定义视图函数(修饰器、返回值)
运行
**视图函数:**修饰器决定了该函数的URL入口和在URL中可传递的参数。该函数的返回值就是访问URL的结果(HTML)。
1234@route('path/<type:arg_name>', methods=['type1', ...])def fun(): return HTTP_TEXT, Status_Code, Header# 返回值可选三个,一般只用第一个,返回HTTP源码。第二个为状态码,第三个为HTTP首部。
重定向:
redirect(URL):需要从flask中引入redirect模块。
url_for(fun_name, **args):生成视图函数fun_name对应的URL,并传入参数。
运行的两种方式:
12if __name__ == '__main__':#运行应用 app.run(debug = True)#开启调试模式,代码更新则自动更新应用
1234# powershell中$env FLASK_APP=he ...
Flask-Windows虚拟环境创建
Python3创建虚拟环境
在目标目录下:
python -m venv env_name
使用虚拟环境
env_name\Scripts\activate
安装Flask
pip install flask
pip list查看安装了哪些包
动手学深度学习-逻辑回归精简实现
搭建简单模型的一般框架
123456789101112131415161718import torchfrom torch.utils import datafrom torch import nndataset = data.TensorDataset(features, labels)data_iter = data.DataLoader(dataset, batch_size, shuffle=True)model = nn.Sequential(nn.Linear(x, y), ...)loss = nn.loss_fun_name()trainer = nn.optim.optimizer_name(model.parameters(), lr=learning_rate)for epoch in len(epoch_num): for X, y in data_iter: l = loss(model(X), y) trainer.zero_grad() l.backward() trainer.step() p ...