python基础知识
python基础知识
杂项
安装第三方库
python3 -m pip install flask_waf
Python标准库常见模块
python解释器相关:sys
操作系统:os
json加载生成:json
正则表达式:re
随机数:random
多线程:multiprocessing
爬虫:bs4
Python第三方开源库常见模块(需安装)
网页爬取:scrapy、requests、BeautifulSoup
WEB服务:django、flask
数据库:PyMySQL、redis
Excel读写:xlrd、xlwt
大数据:PySpark
数据计算:numpy、scipy
图表展示:matplotlib
机器学习:scikit-learn
深度学习:百度PaddlePaddle、谷歌TensorFlow
requests库
HTTP请求方式:
request.get
request.post
…传递参数:
1
2
3
4
5
6
7
8
9
10
11
12import 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)响应网页内容:
r.text
r.content #会自动为你解码 gzip 和 deflate 压缩,是http响应内容的二进制形式
网页状态码:
r.status_code
响应头headers:
r.headers
响应内容编码方式:
r.encoding #从http的header中猜测的响应内容编码方式
r.apparent_encoding #从内容中分析出响应的内容编码方式
设置IP代理:
目的就是有的网站反爬机制会限制单位时间内同一IP的请求次数,我们可以通过设置 IP proxy代理来应对这个反爬机制。
1
2
3
4
5
6
7
8
9import requests
url = '...'
proxies = {
"http": 'http://...',
"https": 'http://...',
}
requests.get('url', proxies=proxies)cookie问题:
查看
cookie
:response.cookies
添加
cookie
:1
2
3
4
5
6
7
8
9import 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)session问题:
为了保持会话的连续,我们一般先创建一个session对象,用它打开一个url
每当我们使用这个
session
对象重新打开一个url
时,请求头都会带上首次产生的cookie
,实现了会话的延续。
1 | import requests |
SYS模块
sys模块主要是针对与Python解释器相关的变量和方法,不是主机操作系统。
sys.argv
sys.argv是一个脚本执行参数列表,列表的第一个元素是脚本名称,从第二个元素开始才是真正的参数。
sys.path
sys.path 类型为list,模块的搜索路径,第一个元素是当前目录,意思是每次会首先搜索当前目录下的模块,用户在程序中可以自己修改sys.path,设置自己的模块搜索路径
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中使用线程有两种方式:函数或者用类来包装线程对象。
函数式:调用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 | from bs4 import BeautifulSoup |
两个参数:第一个参数是要解析的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
过程中难免会遇到无数的报错,但是只要我们能看报错在依次解决,编程能力就会提高
在使用
requests
库爬先知的时候1
2
3
4
5
6
7
8import 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
3pip3 install cryptography
pip3 install pyOpenSSL
pip3 install certifi我都尝试了,无果,我就在想是不是我的代理有问题呢,我把代理关闭之后,再访问,报错就变化了,只有一行,并且指出了问题解决的网址
1
2D:\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
2import urllib3
urllib3.disable_warnings()运行之后,就可以了,直接使用以下代码就可以爬了
1
2
3
4
5
6
7
8import requests
from bs4 import BeautifulSoup
url = 'https://xz.aliyun.com/'
r = requests.get(url)
r.encoding = 'utf-8'
html = r.text
print(html)最后总结一下:就是设置的代理有问题,我现在设置代理之后就报错,关闭代理就可以正常运行