php 开发规范(干货总结)-csdn博客


本站和网页 https://blog.csdn.net/u011323949/article/details/106577386 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

PHP 开发规范(干货总结)-CSDN博客
PHP 开发规范(干货总结)
最新推荐文章于 2024-03-29 16:46:00 发布
eddieHoo 阅读量842 收藏 3 点赞数
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/u011323949/article/details/106577386
版权
本规范基于 PSR 和实际项目经验整理而成,目前已在公司内部推行使用,特分享如下。
分为
编码格式篇
程序设计篇
两大部分。
基于 PSR-1、PSR-2、PSR-12 。
样例:
<?php
/**
* this is a example class
*/
declare(strict_types=1);
namespace Vendor\Package;
use Vendor\Package\{ClassA as A, ClassB, ClassC as C};
use Vendor\Package\SomeNamespace\ClassD as D;
use function Vendor\Package\{functionA, functionB, functionC};
use const Vendor\Package\{ConstantA, ConstantB, ConstantC};
class Foo extends Bar implements FooInterface
public function sampleFunction(int $a, int $b = null): array
if ($a === $b) {
bar();
} elseif ($a > $b) {
$foo->bar($arg1);
} else {
BazClass::bar($arg2, $arg3);
final public static function bar()
// method body
文件:
PHP 代码
必须
使用
<?php ?>
标签,如果是纯 PHP 代码,则不带结束标签
?>
;
编码:PHP 代码文件
以不带 BOM 的 UTF-8 编码(关于 BOM 以及在 PHP 中的问题请自行百度);
declare
namespace
use
按照顺序编写,并且后面必须跟一个空行;
块:类、函数(
use function
)、常量(
use const
)的
需按照此顺序书写,且每个小块之间必须有一空行;
行:
每行
不该
多于80个字符,大于80字符的行 应该 折成多行;
非空行后
一定不可
有多余的空格符;
存在多于一条语句
缩进:
代码
使用4个空格符的缩进(请将 IDE 设置成 Tab 转 4 空格);
关键字:
PHP 关键字
小写,且使用缩写形式(如使用 bool 而不是 boolean);
命名:
类的命名
符合首字母大写的驼峰规则;
方法和函数的命名
符合首字母小写的驼峰规则;
常量命名
全部大写,以下划线分割字母;
方法和属性
不可
用前导下划线表示其可访问性,而应当使用相应的访问修饰符;
类、方法、属性的名称应当能反映其意义,
禁止
使用诸如
$a
$ddd
这样毫无意义的命名;
应当
优先使用
业务概念
命名,
尽量避免
使用纯技术命名,如 sendCoupon 表示发券,属于业务用语,而 createUserCoupon 属于纯粹的技术用语;
在概念明晰的前提下,命名
尽可能简洁,避免不必要的词语。如:相比  orders,getOrders;再如:UserCoupon::send() 优于 UserCoupon::sendCoupon(),前者恰好表达了其含义,而后者不必要地重复了词语 Coupon;
不应
使用通用的变量名,而应该使用具体的名称以增强可读性。如相对于使用
$list
,
$users
更符合上下文,更易于理解和维护;
使用非通用的缩写,造成理解上的困难;
避免
使用纯技术要素的前后缀,如 ajaxGetOrders(作为一个接口,没必要也不应当限制消费者必须使用ajax);
使用名词复数表示集合,如应使用  orderList;
命名空间和类:
命名空间和类的命名必须符合
PSR-4
每个文件只定义一个类;
类命名:大写驼峰规则;
不要将类放到顶级命名空间中,至少需使用一层命名空间(一些特殊框架或历史项目可不遵守);
创建类:
$cls = new MyClass();
无论有无参数,都要加括号;
traits
use traits
:必须放在类左大括号下一行,每个
trait
单独一行,有自己的
。use traits block 后面要有一个空行;
例:
class ClassName extends ParentClass implements \ArrayAccess, \Countable
// constants, properties, methods
class ClassName extends ParentClass implements
\ArrayAccess,
\Countable,
\Serializable
class ClassName
use FirstTrait;
use SecondTrait;
use ThirdTrait;
class Talker
use A, B, C {
B::smallTalk insteadof A;
A::bigTalk insteadof C;
C::mediumTalk as FooBar;
类的常量、属性和方法:
常量:全部字母大写,用下划线分割,如
ORDER_TYPE
属性:
小写驼峰命名,如
$order
使用访问修饰符,不可使用
var
修饰属性;
不可使用
下划线开头来区分可访问性;
方法:
小写驼峰,如
submitOrder
使用访问修饰符;
方法名称后
有空格符;
参数列表中,每个逗号后面
要有一个空格,而逗号前面
有空格;
参数列表
可以
分列成多行,若这样,则包括第一个参数在内的每个参数都
单独成行,并且结束括号以及方法开始花括号
写在同一行,中间用一个空格分隔;
private $name ='lisi';
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
) {
// 方法的内容
修饰符的使用:
abstract
final
声明时,
写在访问修饰符前;
static
写在其后;
abstract class ClassName
protected static $foo;
abstract protected function zim();
方法和函数的调用:
方法及函数调用时,方法名或函数名与参数左括号之间
有空格,参数右括号前也
有空格。每个参数前
有空格,但其后 必须 有一个空格。
参数
分列成多行,此时包括第一个参数在内的每个参数都
单独成行;
Foo::bar($arg2, $arg3);
$foo->bar(
$longArgument,
$longerArgument,
$muchLongerArgument
);
控制结构:
控制结构关键词后
有一个空格;
左括号 ( 后
有空格;
右括号 ) 前也
右括号 ) 与开始花括号 { 间
结构体主体
要有一次缩进;
结束花括号 }
在结构体主体后单独成行;
每个结构体的主体都
被包含在成对的花括号之中,哪怕只有一条语句;
使用关键词
elseif
代替
else if
if 断行:if 中条件过多,可每个条件一行,第一个条件需单独成行,boolean操作符要么全部放开头,要么全部结尾,不可混用;
switch
case
语句 必须 相对
进行一次缩进,而
break
语句以及
内的其它语句都 必须 相对
进行一次缩进;
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
// else body;
if (
$expr1
&& $expr2
} elseif (
$expr3
&& $expr4
switch ($expr) {
case 0:
echo 'First case, with a break';
break;
case 1:
echo 'Second case, which falls through';
// no break
case 2:
case 3:
case 4:
echo 'Third case, return instead of break';
return;
default:
echo 'Default case';
while ($expr) {
// structure body
for ($i = 0; $i < 10; $i++) {
// for body
foreach ($iterable as $key => $value) {
// foreach body
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
花括号的使用:
类和方法:起始和结束花括号
单独一行,且起始花括号前后不能有空行;
流程控制语句:起始花括号不单独成行,结束花括号单独成行;
任何右打括号
后面不可跟注释或其它语句;
public function sampleFunction($a, $b = null)
运算符:
所有的二元和三元运算符的前后
各有一个空格;
一元运算符
后面不可有空格;
$foo = $bar ?? $a ?? $b;
$variable = $foo ? 'foo' : 'bar';
闭包:
闭包声明时,关键词
function
后以及关键词
的前后都
要有一个空格;
开始花括号
写在声明的同一行,结束花括号
紧跟主体结束的下一行;
参数列表和变量列表的左括号后以及右括号前,
参数和变量列表中,逗号前
有空格,而逗号后
要有空格;
参数列表以及变量列表 可以 分成多行,这样,包括第一个在内的每个参数或变量都 必须 单独成行,而列表的右括号与闭包的开始花括号 必须 放在同一行;
$closureWithArgs = function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
$noArgs_longVars = function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
$longArgs_longVars = function (
) use (
$arg1,
function ($arg2) use ($var1) {
},
$arg3
代码注释:
类、方法、函数
写注释;
类、方法
使用块级注释,代码段视情况使用块级或行内注释;
注释
包括功能说明、参数列表、返回类型、异常抛出情况;
注释文本和 // 之间有且只有一个空格;
比较复杂的代码段
编写合适的注释;
不要写不必要的注释,比如下面的注释就是多余的:
// 如果用户存在
if ($user) {
// do something...
注:本规范没有考虑历史项目现状,历史项目可能在某些地方并不符合,可根据实际情况决定是否遵守。
异常:
异常的定义:凡是导致流程无法正常进行下去的,或者没有获取到预期结果的,都属于异常,例如除数的值是 0,获取用户信息接口没有查到用户;
代码中的异常
抛出,而不应当以错误码的形式返回(除了最外层如控制器层,这层需要将异常转换成合适的格式输出给用户或日志。抛出异常而不是返回错误码遵循的原则是:业务逻辑和错误处理(非业务逻辑)分离,处理业务逻辑的代码只需将异常抛出(告诉上层),上层可以处理该异常,也可以不处理(直接再给上层));
异常应当包含明确的错误码和异常描述,其中错误码应当以常量的形式在项目中统一定义,而不应当以直接数字的形式写死(可读性、可维护性);
控制器层
捕获并以合适的方式处理异常,不能继续向上抛出。处理方式包括但不限于返回合适的错误码、记录日志、发告警通知等;
状态码/错误码:
不应当
在程序中直接写数字状态码,而应当在项目中统一的地方定义状态码常量(或类常量);
状态码常量应当符合
命名
一节的规范描述;
不应当在非控制器层返回状态码,而应当以相应的异常代替(相应地,状态码体现在异常实例的 Code 上);
使用通用状态码,每种错误应当定义自己的、唯一的状态码;
状态码应该在项目级别进行规划,不同的项目允许状态码重复,项目内部
不允许
不同的状态描述使用同一个状态码,反之,也
同一个状态描述使用不同的状态码;
日志:
原则上
只在应用层(如应用层服务、控制器等)记录日志,尽量避免在领域层(业务逻辑层)记录日志,但该原则不做绝对要求;
日志内容包括但不限于:请求编号、请求详细内容、响应内容、错误发生的平台、错误描述、调用栈;
原则上所有的异常都
有日志可追踪;
建议
对所有的外部请求以及本系统对外的 API 调用都做日志记录,用于出现异常情况时排查问题;
日志的实现
遵循
PSR-3
日志接口规范;
缓存:
为 js、html、css、image 等静态资源设置使用前端浏览器缓存(配置 nginx 或其他 Web 服务器);
对 js、html、css 资源开启压缩功能(配置 nginx 或其他 Web 服务器);
对经常访问但较少修改的数据使用内存缓存如 Redis、Memcache;
缓存的数据更新后
及时更新/失效缓存;
只缓存热数据,且设置合适的缓存期限。后端缓存建议过期时间不超过7天;
缓存大体量但并非全部热数据的数据;
后端缓存的实现
PSR-16
缓存接口规范;
数据库:
数据表字段原则上
添加注释,除非像 id、is_deleted 等大众皆知的字段;
表字段
多义(一个字段表达多个业务含义,例如“用户登录表”用 user_id 是否为空表示用户是否登录,这里 user_id 表达了两层含义:用户标识和登录态。但需要区分的是,“多义”和“多值”是不同的,如用 status 字段通过多值与运算来存储多个状态,这里 status 的含义仍然是明确的);
数据表的设计应该是“直白”的,
在字段上强加隐含的业务逻辑。例如上面的通过 user_id 是否为空来表示用户是否登录,就存在隐含业务逻辑,导致表结构的不稳定性(因为此时底层的存储结构依赖于上层的业务逻辑,而上层一般总是比底层不稳定);
使用字符串存储 json 时必须仔细考虑其中字段是否可能会被检索,如果需要检索,则这种设计会带来麻烦;
根据业务情况为表创建合适的索引,即使当前数据量不大(必须用动态眼光看待当前的情况,当前量不大不代表以后不大);
在一次请求中对同一条数据先写后读,防止读写分离下数据不一致。如果必须这样做,建议在写入后 sleep 1-2 秒再读;
查询数据库字段,应当明确字段;
连表查询:四个表以上的关联需要慎重,且需要经过所在团队 2 个以上成员的审核;
直接操作非本系统/项目的数据库,必须调用相关接口,例如禁止在微信端直接操作券系统的数据库;
表字段:类似于
last_update_time
这样的字段
设置
on update current_timestamp
保证更新性;
在数据库事务中进行远程调用,这样会导致长事物,高并发下可能会导致数据库崩溃。解决方案:要么去掉事务,要么把远程调用拿到事务外面;
控制器:
在 Controller 中使用静态变量、静态方法。(完全没有必要,且在 easySwoole 等框架中容易出问题);
在基类
Controller
中写 Action,即基类
不能对外提供 API(否则任何子类都拥有该 API,后面无法知道外界实际上到底访问了哪些控制器的该 API);
基类控制器只能提供一些便捷属性和内部便捷方法,以及一些前后置处理逻辑,这些属性和方法都应当是 protected 级别的;
在控制器中写大量业务逻辑,应将其放入逻辑层,保持控制器层的简单;
Session:
Session
仅仅存放“会话”信息,即会话上下文中必须使用的(公共)信息,其他信息应当用缓存存储。例如:商户平台登录者基本信息、所拥有的权限集、当前所在的层(集团、油站组、油站)等更登录会话密切相关的、公共的信息;
在领域层(业务逻辑)中直接使用 $_SESSION,而应当通过传参提供方法需要的东西。换句话说,只应当在应用层(如控制器)中使用 Session,防止 Session 污染;
Session 的添加、修改应当在统一的地方进行,一般如登录成功后、退出登录、切换商户层级等,
在业务代码中随意设置 Session;
API 接口:
对外的 API 接口
有同步的、详细的文档,目前接口文档统一写在 showdoc 上面;
API 接口的更新
保证向前兼容性(除非能够确定调用方且能够相互协商修改);
写型API(添加、更新、删除)
保证多次调用的幂等性(如多次调用不会导致重复添加多条数据),方便失败重试和手工补偿;
API 返回的数据结构
保证一致性,包括字段、结构一致性和数据类型一致性。如不可在某种情况下缺少某个字段,不同情况下某个字段类型不一致等;
所有的列表请求都
支持分页,除非理论上不可能超过 50 条数据;
其它:
在业务逻辑层写非本业务领域代码,而应当将其抽离成基础设施、本地服务或第三方接口(远程服务)。如虽然发送短信验证码属于用户注册流程的一环节,但发送短信验证码本身的逻辑不属于用户注册的业务领域,应将其抽离;
大段代码拷贝,应重构成方法或类;
一个方法或函数
超过 120 行,一个类不应超过 800 行;
谨慎使用静态方法,因为从单元测试的角度一般认为静态方法不具有可测试性;
查询型方法
产生副作用(修改系统状态、数据库记录、插入数据等),只能返回相关数据(即保证查询方法的只读性);
业务模型
直接依赖于 GET、POST 等传入的参数,即不应将外界传入的参数直接丢给业务模型(甚至是直接插入数据库),业务模型
显式定义自己需要的参数;
函数、方法参数的设计:
方法的参数
拥有自解释的能力,即每个参数拥有明确的含义;
优先采用具有明确含义的多参数传递策略。如果参数数量过多,可采用传对象(DTO)的方式。尽量不要直接传递数组,因为数组元素不具有自解释性和约束性,不可维护,是下下策。
例:用户登录校验传参:
推荐:
$login->verify($username, $password);
多参数传参,具有自解释性;
如果参数过多(如超过 7 个),采用传对象方式:
$login->verify(LoginDTO $loginDTO);
因为对象具有明确的定义,也具有解释性;
下下策:
$login->verify($params);
谁都不知道这个 $params 里面到底有什么;
最下下策:
$login->verify($request->params())
,直接将浏览器输入一股脑全部丢进去,你让后人如何维护?
优惠劵
关注
点赞
觉得还不错?
一键收藏
知道了
评论
本规范基于 PSR 和实际项目经验整理而成,目前已在公司内部推行使用,特分享如下。分为编码格式篇和程序设计篇两大部分。编码格式篇基于 PSR-1、PSR-2、PSR-12 。样例:<?php/** * this is a example class */declare(strict_types=1);namespace Vendor\Package;use Vendor\Package\{ClassA as A, ClassB, ClassC as C}.
复制链接
扫一扫
jvm
干货
总结
09-26
php
代码编写性能、安全、
规范
、效率优化教程
dzqxwzoe的博客
03-03
909
在编写
PHP
代码时,我们需要确保代码的安全性、可读性、可维护性和易用性。对于安全性方面,我们需要关注全局变量和魔术常量的使用、避免硬编码机密信息、使用正确的退出方法、使用密码哈希表等,以避免代码运行时遇到意外的问题。此外,了解如何处理错误、使用注释和文档化、避免使用eval和exec等函数,可以提高代码的可读性和可维护性。在优化性能方面,我们需要了解如何优化数据库查询、使用缓存机制、避免使用不必要的循环和递归等常见的性能问题。
参与评论
您还未登录,请先
登录
后发表或查看评论
运行的注意事项和基本语法
php优质创造者
03-29
1612
👨‍💻。
开发
业务
及最实践
qjj199408的博客
06-07
66
一个
应用时,要遵循一些业务
和最佳实践,以确保代码的可读性、可维护性和可扩展性。遵循 PSR 标准:PSR 是
,它包括代码风格和自动加载标准等。代码注释:添加必要的代码注释,描述代码的作用和意图,以便其他
人员能够理解和维护代码。版本控制:使用版本控制系统(如 Git)来管理代码变更,以便追踪和恢复先前的代码版本。性能优化:优化代码和数据库查询,减少资源消耗,并使用缓存减少请求响应时间。单元测试:编写单元测试来测试每个模块和方法,确保代码的正确性和稳定性。
【知识整理】
研发组代码
要求
李木
02-19
1259
统一代码风格、命名
,增强代码可读性和可维护性,供日常
工作中时参考,以提高团队协作的
效率。
uxff的专栏
1830
,包括编码
,业务设计
,数据库
,安全
,性能等方面。
小知识点
weixin_34176694的博客
12-28
163
深入理解
之:Nginx 与 FPM 的工作机制
这篇文章从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理,让我们真正理解 Nginx 与
是如何协同工作的。
那些琐碎的知识点
作者记录的
的很奇特、很难记的知识点。
使用 RSA 和 AES 加密传输数据 js 到
(前端非对称加密)
...
一些简单的
2301_76625070的博客
04-12
187
PSR-2 对大小写 缩写 单词 返回 类型 换行 空格 符号 注解 部分新特性 不
代码等提示。model:
表定义信息和关联表 (一对一 一对多等等)totals 总计 简写 Sum averages 平均 简写 Avg。@param
如果是临时自定义参数 需要加上参数。返回值 非数据库直接查询或分页列表
需要定义返回值。Repositories: 数据库操作。控制器:
接收数据表单验证。ApiException
自定义。AppException
自定义。
各种
,面试有用
pipujopijhpo的博客
04-15
101
基本约定
源文件
代码使用<?
开头,忽略闭合标签?>
文件格式必须是无BOM UTF-8格式
一个文件只声明一种类型,如class和interface不能混写在一个源文件中
缩进
使用4个空格来缩进,IDE可以设置
行长度
每行120个字符
关键字
所有关键字均为小写,如true、false
类名为大驼峰法,如UserModel
类方法名为小驼峰法,如getUserId()
函数使用小写字母加_组合,如get_cookie()
变量名使用小驼峰法,如$userId
常量定义为大写字母
分享
无痕之意的博客
11-15
322
分享一下平常收藏的一些链接,会持续更新
面试相关
面试100题汇总
面试汇总
令人困惑的strtotime
超实用
函数
整理
Think
者周刊
阿里巴巴
,很好的
10-23
可以参考一下,非常实用的技术文档,可以用于指导团队
流程
-纯
,请享用
09-08
注册测绘师考试辅导资料
拿去不谢
12-03
]Android编程
08-03
1. 布局文件中的id命名 2. 布局文件命名 2. 资源文件命名 2. 类和接口命名 2. 方法的命名 2. 变量命名
C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码
04-25
微分方程
含有导数或微分的方程称为微分方程,未知函数为一元函数的微分方程称为常微分方程。
微分方程的阶数
微分方程中导数或微分的最高阶数称为微分方程的阶数。
微分方程的解
使得微分方程成立的函数称为微分方程的解。
微分方程的特解
微分方程的不含任意常数的解称为微分方程的特解。
微分方程的通解
所含相互独立的任意常数的个数与微分方程的阶数相等的微分方程的解称为微分方程的通解。
桌面聊天室
该毕业设计采用了c/s架构,通过javase中的知识编写完成,系统功能包括:用户注册,用户登录,聊天功能。
对于刚学完java基础的同学来说可以通过该毕业设计加深对所学知识的理解。该系统使用socket进行数据的发送,用户注册登录之后,可以进行多人聊天,功能类似qq群聊。
【前端素材】大数据-交通大屏.zip
最新发布
大数据技术指的是用于处理和分析大规模数据集的技术和工具。以下是一些常见的大数据技术和工具:
Hadoop:Apache Hadoop是一个用于分布式存储和处理大规模数据的开源框架。它包括Hadoop Distributed File System(HDFS)用于数据存储和MapReduce用于数据处理。
Spark:Apache Spark是一个快速、通用的集群计算系统,提供了比MapReduce更快的数据处理能力。它支持内存计算和更多复杂的数据处理流程。
NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。
数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。
数据湖:数据湖是一个存储结构化和非结构化数据的存储池,用于支持数据分析和机器学习应用。
机器学习:大数据技术也广泛应用于机器学习领域,支持大规模数据的模型训练和预测分析。
流式处理:针对实时数据处理需求,流式处理技术(如Apache Kafka、Apache Flink)可以实时。
inspect:windows系统下的控件识别工具
windows系统下的控件识别工具,可用于桌面应用的UI自动化测试
038ssm-jsp-mysql高校毕业生就业满意度调查统计系统.zip(可运行源码+数据库文件+文档)
高校毕业生就业满意度调查统计系统是以实际运用为
背景,运用软件工程
方法,采用jsp技术构建的一个管理系统。整个
过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统总体结构设计、系统数据结构设计、系统功能设计和系统安全设计等;详细设计主要包括模块实现的关键代码,系统数据库访问和主要功能模块的具体实现等。最后对系统进行功能测试,并对测试结果进行分析
,及时改进系统中存在的不足,为以后的系统维护提供了方便,也为今后
类似系统提供了借鉴和帮助。
本高校毕业生就业满意度调查统计系统采用的数据库是Mysql,使用JSP技术
。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。
关键词:高校毕业生就业满意度调查统计系统,JSP技术,Mysql数据库
python爬虫
09-01
Python爬虫是一种自动化获取互联网数据的技术。下面是一些Python爬虫的
1. 使用Requests库发送HTTP请求:使用Python的Requests库可以发送HTTP请求,并获取返回的数据。这是爬虫的基础操作。
2. 使用BeautifulSoup解析HTML:BeautifulSoup是一个强大的Python库,用于解析HTML文档。它可以帮助你提取所需的数据。
3. 使用正则表达式进行数据提取:在某些情况下,你可能需要使用正则表达式来匹配和提取特定的数据。
4. 处理动态网页:有些网页内容是通过JavaScript加载的,这些网页称为动态网页。你可以使用Selenium库模拟浏览器行为来处理这些网页。
5. 使用Scrapy框架:Scrapy是一个强大的Python爬虫框架,它提供了高度可定制和可扩展的功能,可以帮助你快速
和管理爬虫程序。
6. 处理验证码:有些网站为了防止爬虫,会设置验证码。你可以使用第三方库(例如pytesseract)识别验证码,并自动填写。
7. 使用代理服务器:在进行大规模爬取时,有些网站可能会限制对同一IP地址的请求频率。你可以使用代理服务器来分散请求,避免被封IP。
8. 遵守网站的爬虫规则:在进行爬虫时,要遵守网站的爬虫规则,避免给网站带来过大的负担。
这些是Python爬虫的一些
,希望对你有所帮助!
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄11年
暂无认证
252
原创
2万+
周排名
5057
总排名
70万+
访问
等级
7621
积分
535
粉丝
346
获赞
35
1078
私信
热门文章
Linux查看所有用户用什么命令
85195
linux 让 crontab 每天03点00执行
50570
Centos7 安装mysql后登录提示:Access denied for user 'root'@'localhost'
27236
Linux下修改.bash_profile 文件改变PATH变量的值
22464
thinkphp多条件查询(AND, OR)
19615
分类专栏
tushare
2篇
爬虫平台
6篇
Scrapy
10篇
财务报表分析
小乐财报
Go
3篇
微服务
5篇
股票数据
量化研究
1篇
Swoole
4篇
Java
部署
心理
分布式
ElasticSearch
Kafka
RabbitMQ
Jupyter
雪球转载
高并发
CI/CD
经济学
数据分析
网络安全
webhook
Composer
Mark
MarkDown
脏数据
PHP PSR
Oauth
如何阅读财富报表
JWT
Thrift
PHPUnit
机器学习
滴滴技术
Geo
GP财务分析
股票
Spring Boot
财经
京东架构
李智慧 架构
電商設計
产品设计相关
技术设计
项目管理
读财报
财务结构
行研报告
大象财经
IPO
招股书
价值事务所
读财报做投资
和田玉
知乎转载
数据库设计
MQ
Hadoop
RBAC
OSRM
Centos
人工智能
77篇
Linux
25篇
js
生活
MySQL
22篇
Git
14篇
Vue
Extjs
网络
Python
Http
laravel
31篇
Docker
Nginx
8篇
大数据
Spark
Redis
13篇
Mac
架构
开源
缓存
面试
最新评论
git 提示:error: unable to rewind rpc post data - try increasing http.postBuffer
eddieHoo:
那就好
机器学习算法应用场景实例六十则
转载的呢
童板车:
谢谢分享
亦麦斯:
可以,你的方法解决了我的问题,谢谢
用scrapy写爬虫(四)利用Flask和ECharts进行数据可视化
Ove_pan:
效果图不见了欸
最新文章
关于生活、改变
怎么让女生主动为你付出?
什么才是一个男人身上最大的魅力?
2024年
11篇
2023年
26篇
2021年
2020年
130篇
2019年
112篇
2018年
60篇
2017年
29篇
2016年
目录
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值