首页 > 编程语言 >19、python 脚本

19、python 脚本

时间:2024-04-15 23:33:05浏览次数:13  
标签:脚本 字符 匹配 19 python https import requests

1.python 安装及配置

下载地址

python2 和 python3 共存安装

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/1s_bkgDT0QxNTQY07LnQRWQ?pwd=2dlb
提取码:2dlb

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,https,import,requests
From: https://www.cnblogs.com/luoluostudy/p/18134749

相关文章

  • python (63):dataclasses 简单示例
    dataclasses简单示例:importtransformersfromdataclassesimportdataclass,fieldimportargparse@dataclassclassPerson():age:int=field(default=10)Name:str=field(default="Tom")high:int=field(default=185,......
  • python基础-函数(lambda表达式、函数作参数、内置函数、推导式)和pip
    函数进阶今日概要:函数名就是一个变量(扩展)匿名函数(lambda表达式)重点内置函数——python内置函数推导式(一行代码生成数据)1.函数名就是变量deffunc():passv1=funcv1()func()defregister():...deflogin():...def......
  • Python迭代器与生成器
    一、迭代器和生成器的定义可迭代对象并不是指某一个数据类型,而是特指存储了元素的一个容器对象。这里的容器对象可以具象为:列表、字典、元组、字符串、range都算是一个"容器"。可迭代对象有个方法叫_iter_()方法,翻译过来叫做迭代。纯可迭代对象的内部数据"所见即所得",可迭代的数......
  • CF1198E Rectangle Painting
    传送门题意:\(10^9\times10^9\)的白色平面上,给定\(m\le50\)个矩形将其涂黑。每次可以选\(\min(h,w)\)的代价将一个\(h\timesw\)的矩形涂白,问涂成全白的最小代价。可以看作每次涂一整条或一整列。如果不是\(10^9\)的范围,可以直接上二分图最小点覆盖了。但是这里我......
  • Python - PEP572: 海象运算符
    海象运算符PEP572的标题是「AssignmentExpressions」,也就是「赋值表达式」,也叫做「命名表达式」不过它现在被广泛的别名是「海象运算符」(TheWalrusOperator),因为:=很像海象赋值中间变量未使用海象运算符pattern=re.compile('s')data='ss'match=pattern.mat......
  • Python调用微信OCR识别文字和坐标
    原理在看雪看到一篇文章:逆向调用QQ截图NT与WeChatOCR-软件逆向。里面说了怎么调用微信和QQ本地的OCR模型,还有很详细的分析过程。我稍微看了下文章,多的也看不懂。大概流程是使用mmmojo.dll这个dll来与WeChatOCR.exe做通信的,也是用它来启动和关闭WeChatOCR.exe进程的。所以关键只......
  • Python列表推导式
    一、列表推导列表推导式又称推导列表。列表推导式是以列表为载体,以推导的方式将数据生成并放在列表中。推导即规则,它支持for循环和筛选模式(if判断模式)。设定一个既定规则在列表中进行数据生成,列表推导式比传统方法更为简洁,代价是放弃一部分的可读性。二、如何声明列表推导式最......
  • python命令行工具:fire
    fire 是一个由Google开源的Python库,它能自动将Python代码转换成命令行接口(CommandLineInterface,CLI)。fire 库极大地简化了从Python函数或类生成命令行工具的过程。特性易用性:fire 是为了简化命令行工具的创建而设计的,它可以自动从任何Python对象生成命令行接口......
  • python--文件操作指南
    '''1.什么是文件:文件是操作系统给用户/应用程序操作硬盘的一种虚拟的概念/接口用户/应用程序操作系统(文件)计算机硬件(硬盘)2.为何要用文件用户/应用程序可以通过文件将数据永久保存的硬盘中,即操作文件就是操作硬盘用户/应用程序直接操作的是文件,对文件进行的所有的操作......
  • python3 pandas模块import报错 ModuleNotFoundError: No module named '_bz2'
    前言全局说明python3pandas模块import报错ModuleNotFoundError:Nomodulenamed'_bz2'一、环境ubuntu18.04Python3.8.17二、报错内容>>>importpandasTraceback(mostrecentcalllast): File"<stdin>",line1,in<module> F......