python基础知识

python基础知识

杂项

  1. 安装第三方库

    python3 -m pip install flask_waf

  2. Python标准库常见模块

    python解释器相关:sys

    操作系统:os

    json加载生成:json

    正则表达式:re

    随机数:random

    多线程:multiprocessing

    爬虫:bs4

  3. Python第三方开源库常见模块(需安装)

    网页爬取:scrapy、requests、BeautifulSoup

    WEB服务:django、flask

    数据库:PyMySQL、redis

    Excel读写:xlrd、xlwt

    大数据:PySpark

    数据计算:numpy、scipy

    图表展示:matplotlib

    机器学习:scikit-learn

    深度学习:百度PaddlePaddle、谷歌TensorFlow

requests库

  1. HTTP请求方式:

    request.get request.post

  2. 传递参数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import requests

    url = '...'
    data = {
    'name': 'w0s1np',
    'age': 18
    }
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0',
    'Request Method':'Get'
    }
    r = requests.get('url', params = data,headers = headers)
  3. 响应网页内容:

    r.text r.content #会自动为你解码 gzip 和 deflate 压缩,是http响应内容的二进制形式

  4. 网页状态码:

    r.status_code

  5. 响应头headers:

    r.headers

  6. 响应内容编码方式:

    r.encoding #从http的header中猜测的响应内容编码方式 r.apparent_encoding #从内容中分析出响应的内容编码方式

  7. 设置IP代理:

    目的就是有的网站反爬机制会限制单位时间内同一IP的请求次数,我们可以通过设置 IP proxy代理来应对这个反爬机制。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import requests

    url = '...'
    proxies = {
    "http": 'http://...',
    "https": 'http://...',
    }

    requests.get('url', proxies=proxies)
  8. cookie问题:

    查看cookieresponse.cookies

    添加cookie

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import requests

    url = '...'
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0'
    }

    cookies = {'cookie_name': 'cookie_value', }
    response = requests.get(url, headers = headers, cookies = cookies)
  9. session问题:

    为了保持会话的连续,我们一般先创建一个session对象,用它打开一个url

    每当我们使用这个session对象重新打开一个url时,请求头都会带上首次产生的cookie,实现了会话的延续。

1
2
3
4
5
6
7
8
9
import requests

url = '...'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0'
}

r = requests.session()
response = r.get(url, headers = headers)

SYS模块

sys模块主要是针对与Python解释器相关的变量和方法,不是主机操作系统。

  1. sys.argv

    sys.argv是一个脚本执行参数列表,列表的第一个元素是脚本名称,从第二个元素开始才是真正的参数。

  2. sys.path

    sys.path 类型为list,模块的搜索路径,第一个元素是当前目录,意思是每次会首先搜索当前目录下的模块,用户在程序中可以自己修改sys.path,设置自己的模块搜索路径

  3. sys.exit(n)

    sys.exit(n) 退出程序,n等于0代表正常退出,不等于0代表异常退出,在shell可以用$?获得退出值。

OS模块

负责程序与操作系统交互,提供访问操作系统底层的接口

负责程序与操作系统交互,提供访问操作系统底层的接口

os.environ 字典类型,读取系统环境变量

os.remove(path) 删除文件

os.rename(src,dst) 重命名文件或目录,可实现文件移动

os.mkdir(dir) 创建目录

os.rmdir(dir) 删除目录,目录必须为空

os.listdir(path) 返回列表,列出目录下的文件和目录

os.path.basename(path) 提取路径参数中的文件名

os.path.dirname(path) 提取路径参数中的目录名

os.path.split(path) 拆分path为(目录名, 文件名)

os.path.splitext(path) 拆分path(文件名, 后缀名)

os.path.exists(path) 判断指定的文件或目录是否存在

os.path.isdir(path) 判断path参数是否是目录

os.path.isfile(path) 判断path参数是否是普通文件

threading 库·

进程是一段程序,类似于浏览器或者视频播放器

线程是每个进程的实际运算单元,相当于视频播放器能够同时播放声音和视频

Python中使用线程有两种方式:函数或者用类来包装线程对象。

  1. 函数式:调用thread模块中的start_new_thread()函数来产生新线程。语法如下:

    1
    thread.start_new_thread ( function, args[, kwargs] )
    • function - 线程函数。
    • args - 传递给线程函数的参数,他必须是个tuple类型。
    • kwargs - 可选参数。

threading 库提供了 Thread 这一个类,可以创建这一个类的实例进行使用,下面是使用方法:

Queue模块

提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。

Queue模块中的常用方法:

  • Queue.qsize() 返回队列的大小
  • Queue.empty() 如果队列为空,返回True,反之False
  • Queue.full() 如果队列满了,返回True,反之False
  • Queue.full 与 maxsize 大小对应
  • Queue.get([block[, timeout]])获取队列,timeout等待时间
  • Queue.get_nowait() 相当Queue.get(False)
  • Queue.put(item) 写入队列,timeout等待时间
  • Queue.put_nowait(item) 相当Queue.put(item, False)
  • Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
  • Queue.join() 实际上意味着等到队列为空,再执行别的操作

bs4库

Beautiful Soup 库一般被称为bs4库,支持Python3

bs4库把html源代码重新进行了格式化,就是把html源码转换为树形,好看

1
2
3
from bs4 import BeautifulSoup

soup = BeautifulSoup("<html>A Html Text</html>", "html.parser")

两个参数:第一个参数是要解析的html文本,第二个参数是使用那种解析器,对于HTML来讲就是html.parser,这个是bs4自带的解析器。

输出:

1
soup.prettify()  # prettify 有括号和没括号都可以

sopu.find_all :根据标签查找需要的,sopu.find_all(class = 'topic-title')这里就是寻找class标签为topic-title的内容

soup.attrs:获取soup对象的属性,sopu.attrs['href'],这里就是获取soup对象的href属性

报错

在学python过程中难免会遇到无数的报错,但是只要我们能看报错在依次解决,编程能力就会提高

  1. 在使用requests库爬先知的时候

    1
    2
    3
    4
    5
    6
    7
    8
    import requests
    from bs4 import BeautifulSoup

    url = 'https://xz.aliyun.com/'
    r = requests.get(url)
    r.encoding = 'utf-8'
    html = r.text
    print(html)

    遇到报错:HTTPSConnectionPool(host='xz.aliyun.com', port=443): Max retries exceeded with url: / (

    就几行代码,报错几十行,百度了很久,大部分都是r = requests.get(url,verify=False),或者安装下面几个包

    1
    2
    3
    pip3 install cryptography
    pip3 install pyOpenSSL
    pip3 install certifi

    我都尝试了,无果,我就在想是不是我的代理有问题呢,我把代理关闭之后,再访问,报错就变化了,只有一行,并且指出了问题解决的网址

    1
    2
    D:\PYTHON3\lib\site-packages\urllib3\connectionpool.py:1013: InsecureRequestWarning: Unverified HTTPS request is being made to host 'xz.aliyun.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
    warnings.warn(

    就去该网址查看原因,大概就是TLS Warnings,再执行以下代码:

    1
    2
    >>> import urllib3
    >>> urllib3.disable_warnings()

    运行之后,就可以了,直接使用以下代码就可以爬了

    1
    2
    3
    4
    5
    6
    7
    8
    import requests
    from bs4 import BeautifulSoup

    url = 'https://xz.aliyun.com/'
    r = requests.get(url)
    r.encoding = 'utf-8'
    html = r.text
    print(html)

    最后总结一下:就是设置的代理有问题,我现在设置代理之后就报错,关闭代理就可以正常运行