<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[weixin_45651821的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weixin_45651821</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weixin_45651821]]></copyright><item><title><![CDATA[代理和selenium的使用——python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108350460</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108350460</guid><author>weixin_45651821</author><pubDate>Tue, 01 Sep 2020 20:48:58 +0800</pubDate><description><![CDATA[一、设置属性
import requests
from random import choice
from threading import Thread
from queue import Queue
from bs4 import BeautifulSoup
import csv
import threading


class NoProxiesError(Exception):
    pass


class NetThread(Thread):
    def __init__(self, ur]]></description><category></category></item><item><title><![CDATA[数据解析]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108328866</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108328866</guid><author>weixin_45651821</author><pubDate>Mon, 31 Aug 2020 20:32:14 +0800</pubDate><description><![CDATA[一、正则数据解析
import requests
from re import findall
import csv
from threading import Thread
from queue import Queue

#

# 知乎
def get_data():
    # 获取数据
    headers = {
        'User-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (K]]></description><category></category></item><item><title><![CDATA[多线程——python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108328636</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108328636</guid><author>weixin_45651821</author><pubDate>Mon, 31 Aug 2020 20:26:34 +0800</pubDate><description><![CDATA[一、添加线程
1.进程和线程
正在的运行的应用程序就是进程，进程和进程之间均运算在其专门的内存空间里面，相互独立不干扰
线程是进程执行任务的基本单元，一个进程默认有一个线程，这个线程叫主线程。
如果进程中需要主线程以外的线程(子线程)，需要手动创建
2.threading模块
1）函数
threading是Python标准库中提供的专门处理多线程问题的模块。
threading.current_thread()   -  获取当前线程
threading.active_count()   -   获取当前进]]></description><category></category></item><item><title><![CDATA[requests的使用——python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108328602</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108328602</guid><author>weixin_45651821</author><pubDate>Mon, 31 Aug 2020 20:17:37 +0800</pubDate><description><![CDATA[一、clientSocket
import re
from socket import socket
import hashlib
import uuid



def get_digest(data):
    hash = hashlib.md5()
    hash.update(data)
    return hash.hexdigest()


def chat(client):
    # 告诉服务器现在要聊天
    client.send('chat'.encode(encoding='u]]></description><category></category></item><item><title><![CDATA[网络通信——python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108328341</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108328341</guid><author>weixin_45651821</author><pubDate>Mon, 31 Aug 2020 20:08:09 +0800</pubDate><description><![CDATA[一、socketServer
import FileManager
# 1.什么是socket
"""
socket又叫套接字，指的是实现通信的两个端。
套接字分为服务器套接字和客户端套接字两种。 服务器套接字会绑定一个固定的ip然后等待客户端来连接它，正常情况下一个服务器是可以同时和多个客户端保持连接的；客户端套接字不需要绑定IP,在需要的时候主动连接服务器套接字。
"""
# 2.socket编程
"""
用代码实现能够通信的服务器和客服端。
python中提供了一个模块叫socket专门用来支持soc]]></description><category></category></item><item><title><![CDATA[文件操作——Python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108247188</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108247188</guid><author>weixin_45651821</author><pubDate>Wed, 26 Aug 2020 20:46:46 +0800</pubDate><description><![CDATA[一、文件基本操作
1.文件操作  -  文件内容的操作，主要是文件读操作和写操作
2.文件操作基本步骤
第一步：打开文件
第二步：读文件-获取文件内容/写文件-将内容写入文件中
第三步：关闭文件
1)打开文件
open(file,mode=‘r’,…,encoding=None)   -  以指定的方式打开指定文件并且返回一个文件对象
a.file - 字符串，需要打开的文件的路径
b.mode - 文件打开方式(决定打开文件后能够支持的操作是读还是写;决定打开文件后操作数据的数据类型是文本数据还是二进制数]]></description><category></category></item><item><title><![CDATA[异常捕获——Python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108228783</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108228783</guid><author>weixin_45651821</author><pubDate>Tue, 25 Aug 2020 20:55:19 +0800</pubDate><description><![CDATA[一、异常捕获
1.什么是异常  -  程序在执行过程因为遇到错误的语法导致程序奔溃
2.什么是异常捕获  -  通过异常捕获的程序让本身会异常的代码能够继续执行
3.怎么捕获异常
1）语法一   -   捕获代码段1中所有的异常
try:
代码段1
except:
代码段2
finally:
代码段3
其他语句
说明：
try、except  -  关键字，固定写法
代码段1       -  需要捕获异常的代码段
代码段2       -  捕获到异常后会执行的代码
执行过程：先执行代码段1，如果执行过程]]></description><category></category></item><item><title><![CDATA[Vue基础——Vue]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108208033</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108208033</guid><author>weixin_45651821</author><pubDate>Mon, 24 Aug 2020 20:38:20 +0800</pubDate><description><![CDATA[一、认识Vue
Vue就是js的一个库 ， 这个库中提供了一个Vue类，通过这个类的对象可以和html中的标签进行绑定。

Vue对象
new Vue({
el: 需要绑定的标签的id选择器,
data: 对象,为被绑定的标签提供各种数据,
methods: 对象,通过提供方法来提供功能,
computed: 对象,通过提供方法来提供数据
})

2.指令
{{Vue属性}}   -    标签内容
v-bind:标签属性名 = “Vue属性”     -    标签属性
v-for=‘变量 in Vue对]]></description><category></category></item><item><title><![CDATA[Ajax网络请求——jQuery]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108207883</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108207883</guid><author>weixin_45651821</author><pubDate>Mon, 24 Aug 2020 20:35:35 +0800</pubDate><description><![CDATA[一、jQuery动态删除
&lt;!DOCTYPE html&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;meta charset="utf-8"&gt;
		&lt;title&gt;动态添加&lt;/title&gt;
        &lt;script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js" type="text/javascript" charset="utf-8"&gt;&lt;/sc]]></description><category></category></item><item><title><![CDATA[jQuery基础——HTML]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108109737</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108109737</guid><author>weixin_45651821</author><pubDate>Wed, 19 Aug 2020 20:26:59 +0800</pubDate><description><![CDATA[一、事件绑定
1.事件绑定
1）给标签的事件属性赋值（函数的调用） -   this是window
2）节点.事件属性 = 函数    -   this是事件源
3)节点.addEventLisenner(事件名称, 函数)    - 事件名称要去掉on; this是事件源
可以给同一个标签的同一个事件绑定不同的驱动程序（一般在原来的功能已经实现了，需要在原功能的基础上添加新的公能的时候才考虑这个问题）
&lt;button id="btn1" type="button"&gt;按钮1&lt;/button]]></description><category></category></item><item><title><![CDATA[BOM和事件——HTML]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108087082</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108087082</guid><author>weixin_45651821</author><pubDate>Tue, 18 Aug 2020 20:37:48 +0800</pubDate><description><![CDATA[一、日期
&lt;!DOCTYPE html&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;meta charset="utf-8"&gt;
		&lt;title&gt;&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
	&lt;/body&gt;
&lt;/html&gt;
&lt;script type="text/javascript"&gt;
    // 获取当前的时间，返回时间对象
    t1 = new Date()
   ]]></description><category></category></item><item><title><![CDATA[原生JS基础——HTML]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108062405</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108062405</guid><author>weixin_45651821</author><pubDate>Mon, 17 Aug 2020 19:59:35 +0800</pubDate><description><![CDATA[一、常见数据类型
js常用数据类型：数字类型、字符串、布尔、数组
1.数字类型(Number)  -  所有数字对应的类型
1)typeof(数据)  -  获取指定数据对应的类型
console.log(typeof(20), typeof(3.1415))

2)数学对象（Math）
a.小数转整数
console.log(Math.ceil(5.8))    // 6
console.log(Math.floor(5.8))   // 5
console.log(Math.round(5.8), Ma]]></description><category></category></item><item><title><![CDATA[JS基础语法——HTML]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/108018374</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/108018374</guid><author>weixin_45651821</author><pubDate>Sat, 15 Aug 2020 10:39:41 +0800</pubDate><description><![CDATA[一、选择器的优先级
1.选择器的优先级
权重值越大优先级越高。（无论权重是多少，内联样式表的优先级都是最高的）
元素选择器、* 权重值是：1
类选择器权重值是：2
id选择器权重值是：4
群组选择器：看每个独立的选择器的权重值分别是多少
后代、子代选择器：所有被&gt;或者空格隔开的选择器的权重之和
&lt;!DOCTYPE html&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;meta charset="utf-8"&gt;
		&lt;title&gt;&lt;/title]]></description><category></category></item><item><title><![CDATA[css布局——HTML]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/107966230</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/107966230</guid><author>weixin_45651821</author><pubDate>Wed, 12 Aug 2020 20:45:24 +0800</pubDate><description><![CDATA[一、标准流布局
1.标准流布局
标签在没有布局相关的属性的时候，默认的布局方式就是标准流布局。
a.块级标签：一个占一行；默认宽度是父标签的宽度，默认高度是内容的高度；设置宽高有效。
h1~h6、p、div、列表相关…
b.行内标签：一行可以显示多个；默认大小是内容的大小；设置宽度无效。
a、span、label、font…
c.行内块标签：一行可以显示多个；默认大小是内容的大小；设置宽高有效。
img、输入框
2.display属性（css）
block：  将标签修改成块级标签
inline： 将标签修]]></description><category></category></item><item><title><![CDATA[表单标签和css基础——html]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/107943859</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/107943859</guid><author>weixin_45651821</author><pubDate>Tue, 11 Aug 2020 20:34:14 +0800</pubDate><description><![CDATA[一、表单标签
表单标签：form
是一个容器标签，本身单独用没有意义，一般需要结合表单相关的标签（input、select、textarea）来使用。
它可以对表单标签中所有用户信息收集相关的标签的内容进行整体的重置和提交。
action属性  -  后端数据接口的地址
method属性  -  请求方式（get/post）
二、input标签的使用
1.input
input是表单相关标签，可以放在form标签中做数据的提交和重置
1)type属性  -  设置标签类型
a. text(默认值) -   ]]></description><category></category></item><item><title><![CDATA[HTML基础——HTML]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/107921331</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/107921331</guid><author>weixin_45651821</author><pubDate>Mon, 10 Aug 2020 20:37:14 +0800</pubDate><description><![CDATA[一、基础语法
1. 什么HTML
HTML（Hypertext Markup Language） - 超文本标记语言
标记语言 - 在不同的文本中加不同的标记让文本的意义和功能不同, 例如：markdown、html
HTML大小不敏感： html == Html == HTML == hTMl  (小写和大写功能一样)
2. 标签  -  就是标记，
标签是HTML的基本结构，不同的标签功能不一样
语法：
双标签(标准标签):  &lt;标签名 属性1=属性值1 属性2=属性值2 …&gt;标签内容&lt]]></description><category></category></item><item><title><![CDATA[面向对象编程——python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/107867768</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/107867768</guid><author>weixin_45651821</author><pubDate>Fri, 07 Aug 2020 17:59:39 +0800</pubDate><description><![CDATA[一、类在的方法
1.类的方法
定义类就是描述清楚这个类是拥有哪些相同的功能和属性的集合。
类中的方法就是对类相同的功能的描述
1)什么是方法
方法就是定义在类中的函数, 它分为三类：对象方法、类方法、静态方法
2. 三种方法
1)对象方法
怎么定义：直接定义在类中的函数就是对象方法
特点： 自带参数self(如果使用对象去调用对象方法，对象方法中self不用传参，系统会自动将当前对象传给self)
self指向当前对象
怎么调用：对象.方法()
2)类方法
怎么定义：在定义函数前加 @classmethod]]></description><category></category></item><item><title><![CDATA[正则和面向对象——python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/107848102</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/107848102</guid><author>weixin_45651821</author><pubDate>Thu, 06 Aug 2020 20:01:15 +0800</pubDate><description><![CDATA[一、正则语法
1. 贪婪和非贪婪
当匹配次数不确定的时候，匹配模式分为贪婪和非贪婪两种:
贪婪:  在能匹配成功的前提下，次数尽可能多的匹配(越多越好)。 默认情况下都是贪婪
非贪婪: 在能匹配成功的前提下,次数尽可能少的匹配(越少越好)。在不确定的匹配次数后加?就是非贪婪的
*?, +?, ??, {M,N}? , {M,}?,  {,N}?
fullmatch贪婪和非贪婪没有区别
re_str = '.*?abc'
print(fullmatch(re_str, 'xyxabc'))
print(ful]]></description><category></category></item><item><title><![CDATA[包和模块——python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/107845669</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/107845669</guid><author>weixin_45651821</author><pubDate>Thu, 06 Aug 2020 17:53:40 +0800</pubDate><description><![CDATA[一、模块的导入
1.什么模块
一个py文件就是一个模块
2. 模块之间的数据交流
我们可以在任意一个模块中使用另外一个模块中所有的全局变量(普通变量\函数\类)
如果想要在一个模块中使用另外一个模块的内容，必须先导入模块
3.模块的分类：

系统模块   -   系统已经定义好的模块，程序员可以直接导入使用
第三方库模块(其他程序员或者机构定义的模块)   -  需要先下载放到工程中以后再导入使用
自定义模块(在工程中创建的模块)    -   程序员直接导入使用

4.导入模块
1)导入方式
import]]></description><category></category></item><item><title><![CDATA[装饰器、迭代器和生成器——python]]></title><link>https://blog.youkuaiyun.com/weixin_45651821/article/details/107822632</link><guid>https://blog.youkuaiyun.com/weixin_45651821/article/details/107822632</guid><author>weixin_45651821</author><pubDate>Wed, 05 Aug 2020 20:49:47 +0800</pubDate><description><![CDATA[一、装饰器
1.什么是装饰器
装饰器的本质就是一个实参高阶 函数和返回值高阶函数
装饰器是用来给函数添加功能（在不能修改函数的基础上给函数添加功能）
返回值高阶函数
def func1():
    def func2():
        return 'abc'
    return func2


print(func1())
print(func1()())


2.怎么给函数添加功能
方法一：直接修改原函数,问题：给不同的函数添加相同功能的时候代码需要写多遍
def sum1(a, b):
   ]]></description><category></category></item></channel></rss>