• python爬虫基础


    链路层 传输层 网络层 应用层

    IDE 集成开发环境
    1.属性前面添加下划线 使对象属性私有化
    2. for循环迭代 iter() 生成迭代器 减少空间占用
    3.python语法糖 具有特殊功能的函数
    4.列表生成试 a = [x*2 for x in range(10)]
    5.类的动态创建 是指当满足某一条件时所创建的类
    6.type class 创建类的关键字
    class Test{}
    Test2 = type("Test2", (), {}) 元类

    def printNum(self):
    print("---num--%d--"%self.num)
    Test2 = type("Test2", (), {})
    等价于 class printNum2:
    def print(self):
    print("--num--%d--"%self,Num)
    7.内建函数:数组中排序
    sorted([1,2,35,5,6,6,56])
    sorted(['a','g','h','e','y','h'])
    8:去除重复
    a = [11,3,3,,5,6,,62,,6,3,6,36,3,6,3,6]
    b = set(a)
    a = b
    9. 求交集a&b 求并集a 求差集 a-b 对称差集 a^b
    10. pdb: l list 显示当前的代码
    n next 向下执行一行代码
    c continue 继续执行代码
    b break 添加断点
    clear 删除断点
    p step 进入到一个函数
    a args 打印所有的形参数据
    r return 快速执行到最后一行
    q quit 推出程序
    11.os.getpid()查看子进程id os.getppid()查看父进程id
    12.os.fork() 多进程创建 生成 while True:
    os.fork() 炸弹
    ret = os.fork() (底层)
    if ret==0:
    子进程
    else:
    父进程
    13.p1 = Process(target=xxx)
    p1.start()
    Process语法机构(进程):
    target:表示这个进程实例所调用的对象
    args:表示调用对象的位置参数元组
    kwargs:表示调用对象的关键字参数字典
    name:为当前进程实例的别名
    group:大多数情况用不到
    Process类常用方法:
    is_alive():判断进程实例还在执行
    join:是否等待进程实例执行结束,或等待多少秒
    start():启动进程实例(创建子进程)
    run():如果没有给定target参数,对这个对象调用start()方法,就将执行对象中的run()方法
    terminate():不管任务是否完成,立即终止
    14.pool = Pool(30)
    pool.apply_async(xxx)
    #主进程一般用来等待,真正的任务都在子进程中执行
    15.socket套接字 tcp 服务器
    ①socket创建一个套接字
    ②bind绑定ip和port
    ③listen使套接字变为可以被动链接
    ④accept等待客户端的链接
    ⑤recv/send接收发送数据

    import socket
    s = socket.cocket.(socket.AF_INET, cocket.SOCK_STREAM)

    16.UDP广播
    192.168.0.0 网络号
    192.168.0.255 广播地址

    import socket,sys
    dest = ('<broadcast>', 7788) 更通用
    s = socket.socket(socket.AF_INET, socket_SOCK_DGRAM)
    #对这个余姚发送广播的数据的套接字进行修改设置
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1_
    s.send("Hi", dest)

    17.arp 根据ip找mac地址
    rarp 根据mac地址找ip
    icmp ping的时候用
    DHCP 自动的发现局域网里没有IP的电脑并分配IP
    DNS 服务器找域名
    网络掩码 看主机的网段
    默认网关 寻找不在某一网段
    tcp 长链接(例如:abacusd 一个一个字母的发 访问百度)
    短链接(例如:agagaga 一次发送多个 看视频)
    一次访问百度所经历的环节:
    1.先解析出baidu.com对应的ip地址
    1.先知道默认网关的mac
    2.组织数据 发送给默认网关(ip还是DNS服务器的ip,但是mac地址是默认网关的mac地址)
    3.默认网关拥有转发数据的能力,把数据转发给路由器
    4.路由器根据自己的路由协议,来选择一个合适的较快的路径 转发数据给目的网关
    5.目的网关 (DNS服务器所在的网关),把数据转发给DNS服务器
    6.DNS服务器查询解析出baidu.com对应的IP地址,并把它原路返回给请求这个域名的client
    2.得到了baidu.com对应的IP地址后,会发送tcp的3次握手,进行连接
    3.使用http协议发送请求给web服务器
    4.web服务器收到数据后,通过查询自己的服务器得到相应的结果,原路返回给浏览器
    5.浏览器接收到数据后 通过浏览器自己的渲染功能来显示这个页面
    6.浏览器 关闭tcp连接,即4次挥手
    完成访问...
    18.为什么有了IP地址还需要MAC地址?
    整体与局部信息传递时候,需要知道的其实是两个地址:
    终点地址(Final destination address)下一跳的地址(Next hop address)IP地址本质上是终点地址,
    它在跳过路由器(hop)的时候不会改变,而MAC地址则是下一跳的地址,
    每跳过一次路由器都会改变。这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。
    19.DDOS攻击 tcp半链式攻击
    tcp半链式攻击称为:SYN FLOOD(SYN洪水)
    是一种典型的DOS(Denial of Service 拒绝服务)攻击
    效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求
    20.DNS攻击 域名解析上做文章 udp广播 伪造DNS应答包
    冒充假的DNS服务器主动给电脑提供钓鱼网站(假的域名),让用户访问,以此获取用户密码。
    21.arp攻击
    伪造数据包 伪造mac地址 中间人做路由器 收到数据保存数据库
    22. 正则表达式
    import re
    r = re.match("匹配方","被匹配方")
    r.group() #查看匹配的字符
    . 匹配任意一个字符{除了 }
    [] 匹配[]中列举的字符
    d 匹配数字
    D 匹配非数字
    s 匹配空白 tab键
    S 匹配非空白
    w 匹配单词字符 即 a-z A-Z 0-9 _
    W 匹配非单词
    * 匹配前一个字符出现0次或者无限次
    + 匹配前一个字符出现一次或者无限次
    ? 匹配前一个字符出现一次或者0次
    {m} 匹配前一个字符出现m次
    {m.} 匹配前一个字符至少出现m次
    {m,n} 匹配前一个字符出现从m到n次
    ^ 匹配字符串开头
    $ 匹配字符串结尾
     匹配一个单词的边界
    B 匹配非单词边界
    | 匹配左右任意一个表达式
    (ab) 将括号中字符作为一个分组
    um 引用分组num匹配到的字符
    {?P<name>} 分组起别名
    {?P<name>} 引用别名为name分组匹配到的字符串
    re.sub{r"要替换的内容","替换后的内容","全部的内容"}
    匹配网址:re.sub{r"(http://.+?/).*", lambda x: x.group(1), s}
    23.单链表的操作
    is_empty()链表是否为空
    length()链表长度
    travel()便利整个链表
    add(item)链表头部添加元素
    append(item) 链表尾部添加元素
    insert(pos, item)指定位置添加元素
    remove(item)删除节点
    search(item)查找节点是否存在
    24.爬虫
    import urllib.request #导包
    url = 'http://www.baidu.com' #目标网址
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'} #模拟浏览器请求包头
    request = urllib.request.Request(url, headers=header) #构造请求
    response = urllib.request.urlopen(request) #请求回复
    html=response.read() #读数据
    print(html) #打印数据
    print(response.getcode()) #返回HTTP的响应码,成功返回200,4服务器页面出错,5服务器问题...
    print(response.geturl()) #返回请求网址

  • 相关阅读:
    find命令之xargs
    find命令之exec
    find 命令概览
    mv命令
    locate 命令
    whereis 命令
    linux which 查看可执行文件的位置
    Linux应用总结:自动删除n天前日志
    Visual Studio
    Visual Studio- “无法启动此程序,因为计算机中丢失 xxx.dll尝试重新安装该程序以解决此问题"
  • 原文地址:https://www.cnblogs.com/jake-jin/p/11435761.html
Copyright © 2020-2023  润新知