python——爬虫与脚本

article/2025/11/8 5:01:40

python——爬虫与脚本

1. Python简介

1.1. Python起源

1.1.1语言作者

​ 贵铎·范·罗萨姆(Guido van Rossum)荷兰人于1989年圣诞节创建了python。

  • 底层语言为C语言

    1991年初,python发布了第一个公开发行版。

  • 用于自动化

  • 金融行业、数据分析

  • 网络安全工具等领域

1.1.2 python名字由来

​ Monty python 是英国的喜剧团队

1.2. python特点

特点说明
高级有高级的数据结构,缩短开发时间与代码量
面向对象为数据和逻辑相分离的结构化和过程化编程添加了新的活力
可升级提供了基本的开发模块,可以在它上面开发软件,实现代码的重用
可扩展通过将其分离为多个文件或模块加以组织管理
可移植性python的底层语言是c,由于c的可移植性
使得python可以运行在任何带有ANSI C编译器的平台上
易学python关键字少、结构简单、语法清晰
易读没有其他语言通常用来访问变量、定义代码和进行模式匹配的命令式符号
内存管理器内存管理是由python解释器负责的

2. Python环境安装

2.1. python下载

python官网

python有两个大版本

  • python2

    旧版本,由于仍有大量的py2程序所以不能被取代

  • python3

    新版本,规范了py语法

2.2. Windows 环境安装python

2.2.1 环境变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjeDqw3q-1660098896713)(https://raw.githubusercontent.com/Li-Ruo/PicGo-picture/main/img/image-20220804171607059.png)]

image-20220804171822622

image-20220804171847079

image-20220804172223593

2.2.2 配置 pip 网络源

​ 在当前用户家目录下新建文件夹并命名为pip ,并在该文件夹中新建文件pip.ini

​ 写入如下内容:

[global]
timeout = 6000
index-url = http://pypi.tana.tsinghua.edu.cn/simple
trusted-host = pypi.tana.tsinghua.edu.cn

2.2.3开发工具

  • Vscode
  • pycharm

3. Python初识

py官方参考文档

3.1. py语法结构

3.1.1 基本输出

# 01-基本输出 
print("Hello World")

3.1.2 注释

# 02-注释方法
'''这是注释
'''
"""这也是注释
"""

3.1.3 缩进

​ 缩进是py与其他编程语言最大的区别

​ Py代码块通过缩进/对齐表达代码逻辑,而不是使用大括号。缩进表达一个语句属于哪个代码块

缩进风格,空格数量:

  • 1-2个:太短,很难确定代码语句属于哪个块
  • 8-10个:太长,如果代码内嵌层次太多,就会降低代码的可读性
  • 4个:刚刚好,是范·罗萨姆支持的风格

3.1.1 续行

​ 一行过长的语句可以使用反斜杠\分解成几行

# 03-续行写法print("I like python very very very very very very very ve\
ry very very very very very very very very very very very\
very very very very very very very very very very much")

3.2. python变量

3.2.1 变量

​ 变量名称约定:

  • 变量名由字母、数字、下划线组成,不是全部必须有
  • 不能以数字开头
  • 区分大小写
变量名是否合法
username合法
userName合法
UserName合法
username_1合法
__username__合法
userN@me不合法
1userName不合法

一般变量的使用过程

  • 声明变量(变量名字、变量类型);
  • 初始化;
  • 变量赋值和反复使用(赋值);

​ Python是(动态类型语言)解释型脚本语言,不需要编译,即不需要预先声明变量的类型,直接就能用

3.2.2 变量赋值

​ 变量的类型和值在赋值那一刻被初始化,变量赋值通过赋值运算符=来执行

一个变量如果需要使用,就给个值;如果不用,就别让它出现

username = 2022print("Welcome," + username)
print("Welcome,{}!".format(username))
print(f"Welcome,{username}!")

赋值运算符

​ Python语言中,等号=是主要的赋值运算符。赋值并不是直接将一个值赋给一个变量。在Python中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量。

​ Python也支持链式多重赋值

>>> x=y=10
>>> x
10
>>> y
10
>>>

增量赋值

​ 从python2.0开始,等号可以和一个算术运算符组合在一起,将计算结果重新赋给左边变量,这被称为增量赋值

>>> x=3
>>> x=x+1
>>> x
4
>>> x ++File "<stdin>", line 1x ++^
SyntaxError: invalid syntax
>>> x+=1
>>> x
5
>>>

多元赋值

​ 另一种将多个变量同时赋值的方法称为多元赋值,采用这种方式赋值是,等号两边的对象对视元组

>>> x,y,z=1,2,3
>>> x
1
>>> y
2
>>> z
3
>>>

3.2.3 捕获输入

​ 根据用户的输入打印信息

username = input("Please input your name:")
print("Welcome," + username)

3.3. 运算符

  • 算术运算符
  • 比较运算符
  • 逻辑运算符

3.3.1 算术运算符

​ 参与运算的操作数是数字,结果也是数字

算术运算符解释
+若操作数字类型,则进行算术运算
若操作字符类型,则进行字符串拼接
-
*若操作数字类型,则进行算术运算
若一个是字符串类型,另一个是数字类型,则将字符串重复输出
/
%取余
//整除
**幂运算

3.3.2 比较运算符

比较运算符解释(运算结果是布尔类型,Ture|False)
<
<=
>
>=
==全等概念(下方代码块)
!=
>>> 10 =='10'
False

3.3.3 逻辑运算符

逻辑运算符解释字符表达
and逻辑与运算&
or逻辑或运算|
not逻辑非运算

3.4. 标识符

3.4.1 关键字

​ 关键字不能做为变量名,函数名,类名

​ 和其他的高级语言一样,Python也拥有一些被称作关键字的保留字符;任何语言的关键字应该保持稳定,但是由于Python是一门不断成长和进化的而语言,其关键字偶尔会更新;通过keyword模块可以查看关键字信息

>>>import keyword
>>>keyword.iskeyword('pass')
True
>>>>>> keyword.kwlist
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

3.4.2 builtins

​ 内置函数,在任何地方都可以调用。

​ 除了关键字之外,python还有可以在任何一段一级代码使用的“内建”的名字集合,这些名字可以由解释器设置或使用,内置函数就在任何时候,任何地方都可以调用的函数。虽然built-in不是关键字,但是应该把它作为“系统保留字”

内置函数

内置函数
abs()delattr()hash()memoryview()set()
all()dict()help()min()setattr()
any()dir()hex()next()slice()
ascii()divmod()id()object()sorted()

保留的常量:

  • True
  • False
  • None

3.5. 基本风格

​ 在python语言中:{}并不代表代码块

#!/usr/bin/env python3
# -*- coding:gbk -*-                            #起始行
'this is a test module'                         #模块文档字符串import sys                                      #导入模块
import osdebug = True                                    #全局变量声明
class FooClass(object):                         #类定义'Foo class'passdef test():                                     #函数定义"test function"foo = Fooclass()if __name__ == '__main__':                      #程序主体test()

4.变量类型

“一切皆对象”

4.1. 对象

4.1.1 py对象特征

Python对象特征

​ 所有python对象都拥有三个特性:

特性说明例子
身份每一个对象都有一个唯一的身份标识
任何对象的身份可以使用内建函数id()来得到
id(userName)
类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。用内建函数type()查看对象的类型type(userName)
对象表示的数据项username

4.1.2 Python对象属性方法

  • 类:抽象的,概括性的,非具体的描述
  • 对象:实例化的,具体的,真实的
  • 属性:对象中存储的值;
  • 方法:对象的可执行动作;
  • 使用.标记法来访问对象的属性和方法

4.2. 数字

4.2.1 基本数字类型

关键字解释例子
int有符号整数自然数
bool
boolean
布尔值True:1 False:0
float浮点数π

4.2.2 进制间转换

​ python默认以十进制数显示,也可以使用其他方法表示数字

进制表达实例
10进制默认11
2进制数字以0b开头0b11
8进制数字以0o开头0o11
16进制数字以0x开头0x11

4.2.3 数字类型函数

函数说明
int( )将字符类型转化为整型
float( )将字符类型转化为浮点型

4.2.4 仅用于整数的函数

函数说明
hex()10 进制数转换为字符串形式的16 进制数
oct()10 进制数转换为字符串形式的8 进制数
bin()10 进制数转换为字符串形式的2 进制数

4.3. 字符串

4.3.1 字符串定义

​ python中字符串被定义为引号之间的字符集合;python支持使用成对的单引号或双引号定义字符串,无论单引号,还是双引号,表示的意义相同;python还支持三引号(三个连续的单引号或双引号),可以用来包含特殊字符或多行内容;python不区分字符和字符串

username = 'Maple'username = "Maple"username = '''Maple'''username = """Maple"""print(username)

4.3.2 字符串拼接

​ 使用+号可以将多个字符串拼接在一起

username = "Maple"
print("Welcome," + username)

​ 使用*号可以将一个字符串重复多次输出

>>> username = "Maple"
>>> username * 3
'MapleMapleMaple'
>>>

4.3.3 字母与ASCII

单个字符操作例子
将单个字符转化成ASCII码ord(‘a’)
将ASCII码转化位字符chr(97)

4.3.4 字符串操作

字符串操作实例
比较运算符:
字符串按照字符的ASCII码值进行比较
‘b’ < ‘bool’
‘b’ > ‘abcd’
角标访问:
利用偏离量获取字符串中的字符
‘zhangsan’[1]
切片:取子串
str[n:m],n,m均代表偏移量,m > n,[n,m-1]
str[::m],每n个字母一组,取第一个字母
str[::-1],字符串反向
‘zhangsan’[1:3]
‘zhangsan’[::3]
‘zhangsan’[::-1]
成员关系:
字符串A 是否是字符串B的子串
‘zs’ in ‘zhangsan’
‘q’ not in ‘zhangsan’

4.3.5 字符串格式化输出

​ f 修饰符,新特性

>>> username = 'Maple'
>>> f"Welcome,{username}"
'Welcome,Maple'
>>>

4.3.6 字符串常用内建函数

常用内建函数说明实例
s.strip()删除字符串两端的空白‘zhangsan’.strip()
s.replace(sub,rep)搜索s字符串中sub,并替换为rep‘zhangsan’.replace(‘e’,‘E’)
s.split©分割字符串,并返回一个列表,可以指定分隔符c,默认为空白‘127.0.0.1’.split(‘.’)
s.center(width)返回一个原字符串居中,并使用空格填充至长度width的新字符串“Maple”.center(11)
s.upper()转换字符串实例中的小写字母为大写‘maple’.upper()
s.lower转换字符串实例中的大写字母为小写‘MAPLE’.lower()

4.4. 列表

类比于PHP中的数组,并且是索引数组

4.4.1 列表的定义

# 09-列表的定义stu1 = ['张三',True,24,59.9]
stu2 = ['李四',True,25,61.9]
stu3 = ['王五',True,25,99.9]

4.4.2 列表元素访问

>>> stu1 = ['张三',True,24,59.9]
>>> type(stu1)
<class 'list'>
>>> f"{stu1[0]} 的成绩是{stu1[3]}"
'张三 的成绩是59.9'
>>>

4.4.3 列表操作

​ 可以通过角标访问的数据类型,叫做序列

​ 序列支持的操作:

  • 加法或乘法:拼接;
  • 切片:截取;
  • 成员关系判断;
>>> stu1 = ['张三',True,24,59.9]
>>> stu2 = ['李四',True,23,84.9]
>>> stu3 = stu1 + stu2
>>> stu3
['张三', True, 24, 59.9, '李四', True, 23, 84.9]
>>>>>> stu1 * 3
['张三', True, 24, 59.9, '张三', True, 24, 59.9, '张三', True, 24, 59.9]>>> stu1[0:2]
['张三', True]
>>> '张三' in stu1
True
>>>

4.4.4 用于作用列表的函数

​ 直接向函数中传参,参数为列表

函数说明示例
list( )将序列转化成列表list(‘张三’)
len( )长度len(stu)
max( )最大值max(stu)
min( )最小值min(stu)
sorted( )排序sorted(stu)
enumerate( )取脚标和元素list(enumerate(stu))

4.4.5 列表内建函数

函数说明示例
l.append(new)向列表中添加一个对象
l.pop(obj)删除列表中的元素
l.count(obj)返回一个对象obj在列表中出现的次数
l.index(obj)obj首次出现的位置
l.insert(index,obj)在偏移量为index的位置插入对象obj
l.reserve()反转列表
l.sort()排序
l.extend(seq)把序列seq的内容添加到列表中

4.5. 元组

​ 元组一旦被定义,就无法更改

4.5.1 元组定义

​ 我们可以将元组认为是静态的列表,它具备列表所拥有的特性,但元组的内容不可改变

4.5.2 创建元组

​ 通过()或工厂函数tuple()创建元组

>>> stu3 = ('王五',True,25,90)
>>> type(stu3)
<class 'tuple'>
>>> stu1
['张三', True, 24, 59.9,]
>>> stu1[3] += 0.1
>>> stu1
['张三', True, 24, 60.0]
>>> stu3[3] += 0.1
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>

4.5.3 元组操作

​ 由于元组也是序列类型,所以元组也可以进行

  • 角标访问;
  • 拼接;
  • 切片;
  • 成员关系判断等

4.5.4 单元素元组

​ 如果需要定义单元素元组,那么创建该元组的时候,需要在结尾处添加一个逗号

4.6. 字典

​ 类似PHP中的关联数组

4.6.1 字典定义

​ 字典是由键值(key-value)对构成的映射数据类型,不支持下标操作

>>> stu1 = {'name':"Maple",'sex':True,'age':24,'score':89.9}
>>> type(stu1)
<class 'dict'>
>>>

4.6.2 创建字典

​ 除了可以通过{}操作符创建字典。还可以通过dict()的方法创建

4.6.3 访问字典元素

​ 字典是映射类型,意味着它没有下标,只有键值对,访问字典中的值需要使用相应的键

>>> stu1['score']
89.9
>>> stu1['score'] += 0.1
>>> stu1['score']
90.0
>>>

4.6.4 更新字典元素

​ 通过键名更新字典键值;如果字典中有该键名,则更新对应的键值;如果字典中没有该键名,则向字典中添加键值对

>>> stu1['email'] = '123@qq.com'
>>> stu1
{'name': 'Maple', 'sex': True, 'age': 24, 'score': 90.0, 'email': '123@qq.com'}
>>>

4.6.5 用作于字典的函数

函数说明
len()返回字典中元素的数目
list()返回字典中使用的所有键名的列表

4.6.6 字典的内建方法

方法说明
d.copy()返回字典的一个副本
d.get(key)对字典dict中的键key,返回它对应值value,如果字典中不存在此键,则返回default的值
d.keys()返回一个包含字典中键的列表
d.values()返回一个包含字典中所有值的列表
d.updata(dict2)将字典dict2的键值对添加到字典dict
d.items()返回一个包含字典中(键,值)对元组的列表

5. 流程控制

对于与编程语言,基本都是遵循从上到下依次执行的规律

5.1. 条件分支

​ 如果…,则…,否则…

​ 通过if语句进行分支

5.1.1 单向条件分支

​ 例:学生成绩高于60则输出“恭喜”

# 08 - 单项条件分支
score = 99.9
if score >=60:print('Congratulations!')

5.1.2 双向条件分支

​ 例:学生成绩高于60则输出“恭喜”,如果低于则输出“你没有通过”

# 09 - 双项条件分支
score = 99.9
if score >=60:print('Congratulations!')
else:print('you cant pass!')

5.1.3 多向条件分支

​ 例:可以根据学生成绩分级

  • 成绩大于等于90,定级A
  • 成绩大于等于80,定级B
  • 成绩大于等于70,定级C
  • 成绩大于等于60,定级D
  • 成绩若小于60分,定为不及格
# 10 - 多项条件分支
score = 90.9
if (score >= 90):print("你的等级为A")
elif (score >= 80):print("你的等级为B")
elif (score >= 70):print("你的等级为C")
elif (score >= 60):print("你的等级为D")
else:print("此次考试未通过")

5.1.4 if判断条件探究

​ 与关键词if相邻的条件判断语句为True,则进入if分支;否则进入else分支,这里面判断语句的值大多数情况下,是非布尔类型变量,这种情况下,就会产生一个问题,什么样的表达式的值会被当作True来看待,什么样的值会当作False来看待

# 11 - if判断条件探究
flag = True                 #True
flag = False                #Falseflag = 1                    #True
flag = 0                    #Falseflag = "Maple"              #True
flag = ""                   #Falseflag = ['Maple']            #True
flag = []                   #Falseflag = ('Mpale',)           #True
flag = ()                   #Falseflag = {'name':"Maple"}     #True
flag = {}                   #Falseif flag:print(f"{flag} means True")
else:print(f"{flag} means False")

基本原则:

  • 大部分非布尔类型的变量都会被认为True值
  • 少部分非布尔类型的变量会被认为False值

5.2. While循环

5.2.1 语法结构

​ 当需要语句不断的重复执行时,可以使用while循环,while循环中语句块会连续不断的循环执行,知道表达式的值为False

​ 当满足条件时,则执行循环体

# 12 - while循环
i = 0
while i < 10:print(i)i += 1

​ 需要注意的问题:

  • 需要避免死循环
  • 计时器让while循环在恰当的时候结束

5.3. for循环

5.3.1 for循环语法结构

# 13 - for 循环
s = "Maple"
for i in s:print(i)
for i in range(10):print(i)

5.3.2 range函数

​ for循环常与range函数一起使用;range函数提供循环条件,完整语法为:

range(start,end,step[默认为1])

5.3.3 列表解析

​ 可以使用for语句动态快速创建列表

#第一种
list(range(101))
#第二种
[i for i in range(101)]

5.4. 特殊流程控制语句

5.4.1 break语句

​ break可以结束当前循环,跳出循环体

# 15 - break语句
while True:username = input("Please input your name:")if username == 'q':breakprint(f"Welcome,{username}!")

5.4.2 continue语句

​ 当触发continue语句时,程序会忽略下方语句,回到循环的顶端继续循环,意味着本次循环“轮空”

# 16 - continue语句for i in range(10):if i % 2 == 1:continueprint(i)

6. 函数

6.1. 函数介绍

6.1.1 函数基本概念

​ 函数是对程序逻辑进行结构化或过程化的一种编程方法,将整块代码巧妙地隔离成易于管理的小块;把重复代码放到函数中而不是进行大量的拷贝,这样既能节省空间,也有助于保持一致性;通常函数都是用于实现某一种功能

6.1.2 创建函数

​ python中函数是用def语句来创建的,语法如下:

# 17 - 函数的定义与调用
def function_name(args):#函数体pass
  • 标题行由def关键字,函数的名字,以及参数的集合(如果有的话)组成
  • def子句(函数体)的部分包括:
    • (可选),体现为字符串的函数文档(函数说明信息,以及帮助等)
    • (必需)函数体

6.1.3 调用函数

​ 同大多数语言相同,python用()调用函数:

  • 如果没有加圆括号,就只是对函数的引用;
  • 函数调用的时候,会在内存中单独开辟一段内存空间
# 17 - 函数的定义与调用
def test():print("This is func test")test()

​ 函数调用过程:

  • 函数被调用时,会单独开辟一段私有的内存空间
  • 函数运行结束的之后,会回到调用函数的位置,继续向下执行
# 18 - 函数调用过程
def a():print("This is func a.")def b():print("func b is starting...")a()print("func b is stopped")
b()

6.1.4 前向引用

​ 先定义后调用

>>> test()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
NameError: name 'test' is not defined
>>> def test():
...     print("This is func test")
...
>>> test()
This is func test
>>>

6.1.5 函数返回值

​ 多数情况下,函数并不直接打印数据,而是向调用者返回一个值

  • 函数的返回值使用return关键字

  • 没有return的话,函数默认返回None

  •   # 19 - 函数返回值def add():x = 10y = 3sum = x + yreturn sumprint(add())
    

6.2. 函数参数

6.2.1 定义参数

​ 类似数学上的代数,用字母表示数。参数分为:

参数类型说明
形式参数函数定义时紧跟在函数名后(圆括号内)的参数称为形式参数,简称形参
由于它不是实际存在变量,所以又称虚拟变量
实际参数在主调函数中调用一个函数时
函数名后面括弧中的参数(也可以是一个表达式)称为"实际参数",简称实参
# 20 - 形参与实参def add(x,y):return x + yprint(add(10,3))

​ 传递参数

  • 尤其注意:调用函数时,实参的个数需要与形参个数一致
  • 实参讲依次传递给形参
  • 建议:实参要与形参一一对应

6.2.2 默认参数

# 21 - 默认参数
def add(x = 0,y = 0):print(f"x = {x}")print(f"y = {y}")return x + y
print(add())

6.2.3 关键字参数

​ 关键字参数的概念仅仅针对函数的调用;这种理念是让调用者通过函数调用中的参数名字来区分参数;这样规范允许参数确实或者不按顺序

# 22 - 关键字参数x = 3
y = 10def add(x = 0,y = 0):print(f"x = {x}")print(f"y = {y}")return x + yprint(add(x = x,y = y))

6.3. 变量作用域

​ 全局和局部的问题

6.3.1 局部与全局变量

局部变量

​ 局部变量是在函数内部定义的变量,随着函数的调用而被创建,函数调用完毕之后,即销毁,由于局部变量时在函数调用后才被创建,所以其作用范围仅限于函数内部

# 23 - 局部变量
from re import X
def test():x = 10return xprint(test())
print(x)      #NameError: name 'x' is not defined.

全局变量

​ 在函数外部定义的变量

# 24 - 全局变量
x = 10
def test():return x
print(x)

6.3.2 名字空间

​ 任何时候,总有一个到三个活动的作用域(分别为全局局部和内建);标识符(变量名,函数名)的搜索顺序一次是局部、全局和内建;提到名字空间,可以想想“看见”这个标识符

文件读取

文件读写操作:

  • 把大象放冰箱里,一共分几步
常用函数功能
f = open(‘PATH’)打开指定路径的文件 f 是文件对象
f . read( )从文件对象中读取文件内容
f . readline( )读取一行内容
f . readlines( )返回一个列表,元素是文件的每一行内容
f . write( )向文件中写入内容
f . writelines( )以列表的方式向文件中写入内容
f . close( )关闭文件
time . sleep( )沉睡响应的秒数

打开文件

(打开冰箱门)

>>> f = open('pass.dic')
>>> type(f)
<class '_io.TextIOWrapper'>
>>> f
<_io.TextIOWrapper name='pass.dic' mode='r' encoding='cp936'>

关闭文件

(关闭冰箱门)

>>> f.close()
>>> f.closed
True
>>>

文件对象访问模式

即访问文件的mode

访问模式操作说明
r以读方式打开文件不存在则报错
w以写方式打开文件存在则清空,不存在则创建
a以追加模式打开不存在则创建
+以读写模式打开如r+,w+,a+
b以二进制模式打开如rb,wb,ab

常用打开文件的参数:r/w/a/rb/wb/ab

读取文件

(把大象放进去或者拿出来)

>>> f = open("pass.dic",'r')
>>> f.read()
'123456\n123.com\nroot\nadmin\n88888888\n696666666\nqwerty\na1b2c3\nqazwsxedc\ntoor\n'
>>>

Tip:read方式会读取全部文档内容

Readline( ) 按行读取

Readlines( ) 读取剩余行

文件迭代

f = open("./pass.dic",'r')for i in f:print(i.strip())f.close()

后续会更新。。。。。。















## Linux Shadow文件读破解

文件写入

write()和writelines()方法

模块介绍

自定义模块

第三方模块

tarfile模块解决

修正index函数问题

python异常处理

所有异常处理

内网主机存活检测程序

类的介绍

类的使用

request模块

re模块

网页信息爬取

request get&post方法

request其他用法

base64&string模块

phpstudy exp编写


http://chatgpt.dhexx.cn/article/sTdOo73V.shtml

相关文章

python网络爬虫:爬虫环境与爬虫简介

python网络爬虫 python爬虫环境与爬虫简介 认识爬虫 浏览网页基本流程 网络爬虫模拟了浏览器去发送请求并且返回响应结果的一个过程。 爬虫概念 网络爬虫也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。 网络爬虫就像一只蜘蛛一样在互联网上沿着…

python爬虫基础知识

今天学习了爬虫原理&#xff0c;网络通信基于URL统一资源定位器&#xff0c;这就是最简单最原始的爬虫。 欢迎加微信18599911861有更多python爬虫教程视频资源分享。 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常…

php编程语言和c语言区别,3月编程语言排行榜出炉,C语言暴走,PHP表现优秀!

近日&#xff0c;3月编程语言排行榜出炉了。 Python排名第四&#xff0c;GO语言仅排名第17位。 在此榜单中&#xff0c;作为编程语言常青树的C语言表现最为优秀&#xff0c;简直是暴走的节奏。 对于此次3月编程语言排行榜&#xff0c;程序员网友们纷纷发表了各自的一些看法&…

用C语言爬网页代码

今天下午把爬代码看了一下&#xff0c;也敲了&#xff0c;只不过我爬下来的总是乱码&#xff0c;现在大多数爬虫都是Python和Java&#xff0c;很少有人用C语言爬了&#xff1b; #include <stdio.h> #include <winsock2.h> #include<string.h> #pragma commen…

C语言的主要用途以及未来发展

截止到 2022 年&#xff0c;C语言已经发布了50 年&#xff0c;是不折不扣的“大叔”或者“大爷”&#xff0c;但是&#xff0c;C语言在编程界依然非常流行&#xff1b;2019 年&#xff0c;C语言由于速度快、平台独立的特性&#xff0c;在世界编程语言排行榜中夺得第二名。 C语言…

python爬虫笔记

requests 请求库 import requests import recontent requests.get(https://book.douban.com/).text pattern re.compile(<li.*?cover.*?href"(.*?)".*?title"(.*?)".*?more-meta.*?author">(.*?)</span>.*?year">(…

爬虫学习笔记

目录 一、 初识爬虫 1. 简单的爬虫 2. web请求 3. http协议 4. requests入门 二、数据解析与提取 1. 概述 2. Regular Expression 正则表达式 3. re模块 4. 豆瓣电影练习 5. 电影天堂练习 6. bs4 北京新发地、热搜榜 7. 抓取图库图片 8. Xpath语法 9. xpath猪八…

Python爬虫自学

Python爬虫自学 前言 这是我自己学习Python爬虫的学习笔记&#xff0c;内容大部分来自上海交通大学出版的《Python语言程序设计实践教程》&#xff0c;欢迎大家一起交流 参考博客&#xff1a; Python爬虫教程&#xff08;纯自学经历&#xff0c;保姆级教程&#xff09; Be…

爬虫基础day01

爬虫基础day01 一、介绍 什么是网络爬虫&#xff1f;&#xff08;面试题&#xff09; 网络爬虫&#xff08;Web Spider 又称为网页蜘蛛、网络机器人&#xff09;就是模拟浏览器发送网络请求&#xff0c;就收请求响应&#xff0c;一种按照一定的规则&#xff0c;自动的抓取互联…

网络爬虫详解

网络爬虫&#xff08;web crawler&#xff0c;又称为网页蜘蛛&#xff08;只针对网页&#xff0c;B/S系统&#xff09;&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓…

Linux C语言实现简单爬虫

文章目录 代码案例源代码 应用知识hostent结构体gethostbyname()函数inet_pton和inet_ntopinet_ptoninet_ntop sockaddr_inin_addr结构htons 编辑socket()connect()sprintf函数format标签属性 setsockopt 代码案例 爬到的HTML文件 输入终端的参数 源代码 /***************…

fcntl函数 和 ioctl函数

文章目录 一、fcntl 函数二、ioctl 函数 一、fcntl 函数 fcntl()函数可以对一个已经打开的文件描述符执行一系列控制操作&#xff0c;譬如复制一个文件描述符&#xff08;与dup、dup2 作用相同&#xff09;、获取/设置文件描述符标志、获取/设置文件状态标志等&#xff0c;类似…

linux ioctl 理解

背景 传统的操作系统可以分成两层&#xff0c;用户层和内核层。内核代码处理敏感资源同时在不同应用程序中间提供了安全且可信的隔离&#xff0c;出于此&#xff0c;操作系统要阻止用户态的程序直接访问内核资源。用户空间的程序通常发出一个给内核的请求&#xff0c;该请求称为…

linux ioctl函数介绍

1. 概念 ioctl 是设备驱动程序中设备控制接口函数&#xff0c;一个字符设备驱动通常会实现设备打开、关闭、读、写等功能&#xff0c;在一些需要细分的情境下&#xff0c;如果需要扩展新的功能&#xff0c;通常以增设 ioctl() 命令的方式实现。 在文件 I/O 中&#xff0c;ioctl…

ioctl函数详解(参数详解,驱动unlocked_ioctl使用、命令码如何封装)

ioctl函数详解 一、ioctl函数的原型 在用户空间的函数原型 #include <sys/ioctl.h> int ioctl(int d, int request, ...); //io的控制&#xff0c;设备的控制/***第一个参数d是打开的文件描述符***//***The second argument is a device-dependent request code&…

IOCTL函数用法

.ioctl 的实现 一、ioctl的简介&#xff1a; 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数&#xff0c;但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动&#xff0c;想要一个弹出光驱的操作&#xff0c;这种操作并不是所有的…

IOCTL函数用法详解

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数 。所谓对I/O通道进行管理&#xff0c;就是对设备的一些特性进行控制&#xff0c;例如串口的传输波特率、马达的转速等等。它的调用个数如下&#xff1a; int ioctl(int fd, ind cmd, …)&#xff1b; 其中fd是用户程序打…

linux ioctl()详解

一、ioctl的简介&#xff1a; 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数&#xff0c;但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动&#xff0c;想要一个弹出光驱的操作&#xff0c;这种操作并不是所有的字符设备都需要的…

ioctl 详细介绍

ioctl 详细介绍 (一)ioctl 的作用: 通过设备驱动程序执行各种类型的硬件控制。除了简单数据传输外,大部分设备可以执行其他的一些操作,比如,用户空间经常请求设备锁门、弹出介质、报告错误信息、改变波特率或者执行自破坏等等。 Ioctl的操作通过流程图简言之: 从图…

ioctl函数

一、什么是ioctl   ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理&#xff0c;就是对设备的一些特性进行控制&#xff0c;例如串口的传输波特率、马达的转速等等。   ioctl函数是文件结构中的一个属性分量&#xff0c;就是说如果你的驱动程序…