19、python 脚本
1.python 安装及配置
2.python 可视化
import turtle turtle.pensize(2) #画一个小圆
turtle.circle(10)
turtle.circle(40)
turtle.circle(80)
turtle.circle(160)

工具:
python IDE:pycharm
链接:https://pan.baidu.com/s/1xg8OcKNftLDrcHjKe2ASlw?pwd=41kr
提取码:41kr
Windows + sublime/VSCode + python
Linux + vim/sublime + ipython
pip 官网:https://pypi.org/project/pip/(python 2.7.9 + 或 python 3.4 + 以上版本自带)
3.python 网页爬虫
3.1.爬虫思想
爬虫:数据皆可取
Linux:一切皆文件
python:一切皆对象
LaTex:所想即所得
Office:所见即所得
爬虫会造成短时间内服务器吞吐量过大,CPU 升高,负载过重,影响正常用户的访问;出于对数据保护,网站所有者会设置验证码、滑动窗口等需要人为交互的操作来保证访问确保不是爬虫程序,因此爬虫需要考虑到规划、负载
通常网站所有者会在网站根路径下放置一个 robots.txt 文件,该文件定义了一套协议规定网络爬虫器不应该爬取或允许爬取那些区域
3.2.HTTP 请求协议
最基本的 HTTP 请求方法:GET、POST、PUT、DELETE
3.3.常用 python 库
1.urllib/urllib2/urllib3:https://docs.python.org/zh-cn/3/library/urllib.html(自带)
urllib 是一个收集了多个涉及 URL 的模块的包,包含打开、读取、解析URL、解析 robots.txt 文件、异常处理等功能
python3 中也有 urllib 和 urllib3 两个库,urllib 几乎是 python2.7 中 urllib 和urllib2 两个模块的集合,所以常用 urllib 模块,而 urllib3 则作为一个拓展模块使用。python2.7 中的 urllib2 相当于 python3 中的 urllib.request。
通常 python2.7 中的 urllib2 在移植到 python3 中时可疑改写成:import urllib.request as urllib2
2.requests:https://requests.readthedocs.io/zh_CN/latest(pip install requests)
该模块允许发送 HTTP/1.1 请求
3.beautiful soup:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#(pip install beautifulsoup4)
该模块可以从 HTML 或 XML 文件中提取数据,能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。
3.4.案例1-爬取图片
#coding:utf-8
from requests import *
from re import *
"""
coding:utf-8:指定编码格式
爬取多肉图片并保存在本地
""" for i in range(5):
#获取站点源码
a=get('https://www.duitang.com/blog/?id=14188000%d'%(i+47))
"""
.:匹配一个
+:后面所有的都能匹配上
?:最小化匹配(能匹配多少就匹配多少)
.+?:能匹配所有的东西
找对应的图片源码,限制找源码中只能有多肉图片那一行代码:
<img alt=".+?" id="mbpho-img" class="js-favorite-blogimg" src="https
保证能够精准匹配
src="(https.+?)":这里加括号表示只需要括号这部分内容
若没有后面的style匹配,那么返回的结果就会从https开始后面的所有字符,包括stype中的内容
"""
reg=compile(r'<img alt=".+?" id="mbpho-img" class="js-favorite-blogimg" src="(https.+?)" style=".+?" />')
#输出找到的图片地址,findall:查找所有跟上述代码一样的内容
#print(findall(reg,a.text)) ,text:会对内容进行转码操作
datas=findall(reg,a.text) #请求刚才匹配到的数据,content:获取源码
img=get(datas[0]).content
#将请求到的图片保存到本地 /img 下
f=open('./img/%d.jpg'%(i),'wb')
f.write(img)
f.close()
3.5.requests 库的使用
import requests
"""
requests 库的使用
""" r= requests.get(
'https://github.com/timeline.json',
headers = dict, #头信息
params = dict, #Url参数params
data = dict, #发送表单post
proxies = dict, #代理
cookies = dict, #添加cookie信息
timeout = int #设置超时事件
);
r.txt #获取源码
r.status_code #获取状态码
3.6.正则表达式
\:转义
^:匹配首字符串
$:匹配尾字符串
*:匹配前面子表达式零次或多次
+:匹配前面子表达式一次或多次
?:匹配前面子表达式零次或一次
{n}:匹配 n 次。如:o{2} 不能匹配 bob 中的 o,但能匹配 food 中的两个 o
{n,}:至少匹配 n 次。如:o{2} 不能匹配 bob 中的 o,但能匹配 fooood 中的所有 o
{n,m}:其中 n<=m,最少匹配 n 次且最多匹配 m 次
?:非贪心量化(Non-greedy quantifiers):当该字符紧跟在任何一个其他重复修饰符(*,+,?,{},{n,},{n,},{n,m})后面时,匹配模式是非贪婪的。
非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 oooo,o+? 将匹配单个 o,而 o+ 将匹配所有 o。
.:匹配除 \n 之外的任何单个字符。要匹配包括 \n 在内的任何字符,要使用像 (.|\n) 的模式
(pattern):匹配 pattern 并获取这一匹配的子字符串。
[^xyz]:排除型字符集合。匹配未列出的任意字符
[a-z]:字符范围。匹配指定范围内的任意字符
[^a-z]:匹配任何不再指定范围内的任意字符
\b:匹配一个单词边界,也就是指单词和空格间的位置。如,er\b 可以匹配 never 中的 er,但不能匹配 verb 中的 er。
\B:匹配非单词边界。如,er\B 可以匹配 verb 中的 er,但不能匹配 never 中的 er。
\cx:匹配由 x 指明的控制字符。如,\cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z之间,否则将 c 视为一个原义的 c 字符。
\d:匹配一个数字字符。注意,Unicode 正则表达式会匹配全角数字字符。
\D:匹配一个非数字字符。
\f:匹配一个换页符。等价于 \x0c 和 \cL
\n:匹配一个换行符。等价于 \x0a 和 \cJ
\r:匹配一个回车符。等价于 \x0d 和 \cM
\s:匹配任何空白字符,包括 空格、制表符、换页符。等价于 [\f\n\r\t\v]。注意 unicode 正则表达式会匹配全角空格符
\S:匹配任何非空白字符。
\t:匹配一个制表符。等价于 \x09 和 \cl
\v:匹配一个垂直制表符。等价于 \x0b 和 \cK
\w:匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9]。注意 unicode 正则表达式会匹配中文字符
\W:匹配任何非单词字符。
\ck:匹配控制转义字符。k 代表一个字符。等价于 Ctrl-K
正则优先级
最高:\
高:()、(?:)、(?=)、[]
中:*、+、?、{n}、{n,}、{n,m}
低:^、$、中介字符
次最低:串接(即相邻字符连接在一起)
最低:|
3.7.反爬技巧与绕过手段
3.7.1.header 检测与绕过
1.常用 header 头
Accept:指定客户端能够接收的内容类型。如,Accept: text/plain, text/html
Accept-Charset:浏览器可以接受的字符编码集。如,Accept-Charset: iso-8859-5
Accept-Encoding:指定浏览器可以支持的 web 服务器返回内容压缩编码类型。如,Accept-Encoding: compress, gzip
Accept-Language:浏览器可接受的语言。如,Accept-Language: en,zh
Connection:表示是否需要持久连接(HTTP 1.1 默认进行持久连接)。如,Connection: close
Content-Length:请求的内容长度。如,Content-Length: 348
Content-Type:请求的实体对应的 MIME 信息。如,Content-Type: application/x-www-form-urlencoded
Referer:从什么地方来。如:Referer: http://www.zcmhi.com/archives/71.html
2.无 header
#coding:utf-8
from requests import *
from re import * url = 'https://www.zhihu.com/' r=get(url).text
print(r) 运行结果可能是 400
3.加 header 绕过
#coding:utf-8
from requests import *
from re import * url = 'https://www.zhihu.com/'
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'}
r=get(url,headers=header).text
print(r)
获取正常数据
3.7.2.cookie 加密
#coding:utf-8
from requests import *
from re import * url = 'http://192.168.1.5/a.php/'cookie={'PHPSESSID':'xxxx'}
data={'token':'xxx','type':'7'}
r=post(url,cookies=cookie,data=data).text
print(r)
3.7.3.验证码
1.使用验证码接口
2.编写验证码识别库
3.7.4.ban IP
换代理
19、python 脚本的更多相关文章
- 将Python脚本封装成exe可执行文件 转
将Python脚本封装成exe可执行文件 http://www.cnblogs.com/renzo/archive/2012/01/01/2309260.html cx_freeze是用来将 Pyt ...
- 用 Python 脚本实现对 Linux 服务器的监控
目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统 ...
- Python脚本控制的WebDriver 常用操作 <二十七> 文件下载
测试用例场景 webdriver允许我们设置默认的文件下载路径.也就是说文件会自动下载并且存在设置的那个目录中. Python脚本 测试用Python代码: # coding=gbk ''' Crea ...
- Python脚本控制的WebDriver 常用操作 <二十八> 超时设置和cookie操作
超时设置 测试用例场景 webdriver中可以设置很多的超时时间 implicit_wait.识别对象时的超时时间.过了这个时间如果对象还没找到的话就会抛出异常 Python脚本 ff = webd ...
- 用 Python脚本生成 Android SALT 扰码
发布Android 有偿应用时需要随机生成 SALT 扰码夹在文件中,以下是 Python脚本(当然你选择 C/Java/SHELL/Perl 或别的都行) #!/usr/bin/python # F ...
- linux下设置计划任务执行python脚本
linux下设置计划任务执行python脚本 简介 crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自 ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
- 使用python脚本实现统计日志文件中的ip访问次数
使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...
- shell脚本和python脚本实现批量ping IP测试
先建一个存放ip列表的txt文件: [root@yysslopenvpn01 ~]# cat hostip.txt 192.168.130.1 192.168.130.2 192.168.130.3 ...
- Shell学习笔记之shell脚本和python脚本实现批量ping IP测试
0x00 将IP列表放到txt文件内 先建一个存放ip列表的txt文件: [root@yysslopenvpn01 ~]# cat hostip.txt 192.168.130.1 192.168.1 ...
随机推荐
- Scala 递归和尾递归
1 package com.atguigu.function 2 3 object Recursion { 4 def main(args: Array[String]): Unit = { 5 // ...
- Hadoop_04 验证Hadoop安装成功
[root@master ~]# cd hadoop-2.7.7/[root@master hadoop-2.7.7]# cd etc[root@master etc]# cd hadoop/[roo ...
- #二进制拆分,矩阵乘法#洛谷 6569 [NOI Online #3 提高组] 魔法值
题目 分析 考虑一个点的权值能被统计到答案当且仅当其到1号点的路径条数为奇数条. 那么设 \(dp[i][x][y]\) 表示从 \(x\) 到 \(y\) 走 \(i\) 步路径条数的奇偶性, 这个 ...
- #扩展欧拉定理#CF906D Power Tower
题目 给定一个数列,有\(m\)组询问 定义 \[\large f(x-1)={a_x}^{f(x)} \] 若 \(f(r)=a_r\) 求 \(f(l)\) 对固定的 \(mod\) 取模 分析 ...
- #二分图匹配#UVA1194 Machine Schedule
题目 有两台机器 \(A,B\) 分别有 \(n,m\) 种模式. 现在有 \(k\) 个任务.对于每个任务 \(i\) ,给定两个整数 \(a_i\) 和 \(b_i\), 表示如果该任务在 \( ...
- #带权并查集#HDU 3038 How Many Answers Are Wrong
题目 有未知的\(n\)个数,有\(m\)组询问,形如区间和等于给定值, 问有多少条错误的询问,一旦错误忽略此条询问 \(n\leq 2*10^5,m\leq 4*10^4\) 分析 用带权并查集,记 ...
- 第一视角看方法调用时的jvm
关于比较学术的jvm每个内存区域我之前都写过,就不重复赘述了,这里附上链接:https://www.cnblogs.com/gmt-hao/p/13603534.html, https://www.c ...
- SpringCloud OpenFeign token中转
OpenFeign 的本质是调用指定服务的 Controller. 前后端分离项目,调用 Controller 是需要传递 token 的. OpenFeign 并不会自动携带 token 去访问 C ...
- Qt 实现涂鸦板一:简易涂鸦板
新建一个Qt项目,在 .h 文件中写入 #pragma once #include <QtWidgets/QWidget> #include "ui_xuexi.h" ...
- 《深入理解Java虚拟机》读书笔记:内存分配策略
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存.关于回收内存这一点,我们已经使用了大量篇幅去介绍虚拟机中的垃圾收集器体系以及运作原理 ...