python的学习

准备

rmdir 删除目录

ipconfig 查看IP地址

ping 测试网络连接

python 进入python环境

exit() 退出环境

cd 指定目录

dir 浏览目录

mkdir 创建新的目录

pip包管理命令

pip list 列出匹配管理的包有哪些

pip install 包名

pip install redis == 3.0.2

pip uninstall 包名 卸载

pip -v 查看版本

pip freeze > requirements.txt 将项目依赖的包输出到指定的requirements.txt中

pip install -r requirements.txt 使用pip安装requirements.txt中依赖的文件,其中-r指requirements.txt文件

安装requests

requests是第三方库,python默认不会自带这个库。

  1. git clone https ://github.com/kennethreitz/requests
  2. cd requests
  3. python setup.py install
安装Selenium

Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击,下拉等操作。对于一些js渲染的页面来说,这种抓取方式很有效。

print

print(value, …, sep=’ ‘,end=’\n’, file=sys.stdout, flush=False)

sep默认的分隔符是空格

python基础

数与表达式

乘方运算符的优先级比求负(单目减)高,因此-3**2等价于-(3**2)。如果要计算的是(-3)**2,必须明确指出。

十六进制:0xAF

八进制:010

二进制:0b101011

2 / 4 # 除法,得到一个浮点数

2 // 4 # 除法,得到一个整数

2 ** 5 # 乘方 32

用a + bj,或者complex(a,b)表示复数。

注意

1、Python可以同时为多个变量赋值,如a, b = 1, 2。

2、一个变量可以通过赋值指向不同类型的对象。

3、数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。

4、在混合计算时,Python会把整型转换成为浮点数。

标准数据类型
  • Number数字
  • String字符串
  • List列表
  • Tuple元组
  • Set集合
  • Dictionary字典

有四种数字类型

  1. int整数
  2. bool布尔
  3. float浮点数
  4. complex复数

判断类型

type(a) :判断a的数据类型,不会认为子类是一种父类类型。

isinstance(a,int):判断a是否为int类型,会认为子类是一种父类类型。

del val_a, var_b 删除单个或多个对象。

字符串截取

str=’Runoob’ print(str) # 输出字符串

print(str[0:-1]) # 输出第一个到倒数第二个的所有字符

print(str[0]) # 输出字符串第一个字符

print(str[2:5]) # 输出从第三个开始到第五个的字符

print(str[2:]) # 输出从第三个开始后的所有字符

print(str * 2) # 输出字符串两次

print(str + ‘你好’) # 连接字符串

print(‘hello\nrunoob’) # 使用反斜杠()+n转义特殊字符

print(r’hello\nrunoob’) # 在字符串前面添加一个 r,表示原始字符串,不会发生转义

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=””

print(x) # 换行输出

print(x,end=” “) # 不换行输出

模块

import somemodule 导入整个模块

from somemodule import firstfunc, secondfunc, thirdfunc 从某个模块中导入多个函数

保留字

不可用作任何标识符名称。Python的标准库提供了一个keyword模块,可输出当前版本的所有关键字。

注释

单行以#开头,多行用三个单或双引号包裹。

urllib库

python内置的HTTP请求库

request解析库

urlopen:打开网址

bs4解析库

bs4: BeautifulSoup

用于解析网页,提取指定数据的。接口简单,较人性化,但bs4只能解析html格式的数据。

BeautifulSoup类

文件解析库:

‘html.parser’:是python自带的一个文件解析库。

‘lxml’:是一个第三方文件解析库,需安装。

根据html标签查找信息

1
content = soup.find('div',itemprop='acticleBody').text

find() 方法:返回第一个匹配的内容,为字符串类型

find(name,attrs,recursive,text,**kwargs)

这五个参数都可以充当过滤器,提高匹配结果的精确度。

find_all() 方法:返回所有匹配的项,为一个列表类型

find(name,attrs,recursive, text,limit,**kwargs)

实例

二维码
1
2
3
4
5
6
7
pip install MyQR

from MyQR Simport myqr
words: 文本,链接地址或字符串
picture:二维码的背景图片
colorized:True,表示生成彩图
save_name: 表示生成的二维码的名字
1
2
3
4
5
6
7
from MyQR import myqr
myqr.run(
words="https://www.icourse163.org/learn/NHDX-1449955168",
picture="1.png",
colorized=True,
save_name="ORMooc.png"
)
个人名片
1
2
3
4
5
6
7
8
9
10
pip install Segno

from segno import helpers
qr = helpers.make_mecard(
name='Erin',
city='湖南省衡阳市南华大学',
phone='1581529632',
email='3511564414@qq.com'
)
qr.save('Erin名片.png',scale=10)
爬取小说
1
2
3
4
import urllib.request

response = urllib.request.urlopen('http://www.39shubao.com/')
print(response.read().decode('utf-8'))

报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

所以去掉解码格式utf-8,输出的字节码可以看到它是以”b’\x1f\x8b\x08”开头的 ,说明它是gzip压缩过的数据,这也是报错的原因,所以我们需要对我们接收的字节码进行一个解码操作。

1
2
3
4
5
6
7
8
9
import urllib.request
from io import BytesIO
import gzip

response = urllib.request.urlopen('http://www.39shubao.com/')
buff = BytesIO(response.read())
f = gzip.GzipFile(fileobj=buff)
htmls = f.read().decode('utf-8')
print(htmls)

解决乱码问题

1
2
3
4
import requests
url = 'http://www.shuquge.com/txt/63542/9645082.html'
response = requests.get(url)
print(response.text)

通过response.text拿到的数据出现乱码是因为该网页对数据进行加密,所以直接拿到的数据乱码了。

解决:

方法一:使用较老的方法response.encoding='utf-8',只能解决utf-8的乱码,其他格式的不能解决。

方法二:response.encoding=response.apparent_encoding,自动解决乱码格式,不仅utf-8格式的可解决,gbk格式的也可解决。

未封装的爬一章小说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
# 使用parsel来解析网页内容
import parsel
url = 'http://www.shuquge.com/txt/63542/9645082.html'
response = requests.get(url)
# 自动解决乱码问题
response.encoding = response.apparent_encoding
# print(response.text)
# 把网页数据结构化
sel = parsel.Selector(response.text)
# 根据css选择器提取标题
title = sel.css('.content > h1::text').get()
# 根据css路径提取内容
content = sel.css('#content::text').getall()
# 根据xPath提取内容,getall是提取全部的内容,也有re方法,用于匹配正则里面的内容
# print(sel.xpath('//div[@id="content"]/text()').getall())
# 保存数据
with open(title + '.txt',mode='w', encoding='utf-8') as f:
f.write(title)
# 用切片去掉最后三行
for con in content[:-3]:
# str使用replace去除空格
f.write(con.replace('\xa0',''))
# f.write(con.strip('\xa0'))
动态爬取数据

数据信息不是存放在网页源代码中,它是一个动态更新的网站,需要实时更新的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests
import json
import pandas as pd

url = 'https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist'
response = requests.get(url)
content = json.loads(response.text)
print(content['data'])
df = pd.DataFrame(columns=['国家及地区','确诊人数','死亡病例','治愈病例'])
for i in range(len(content['data'])):
df.loc[i + 1] = [content['data'][i]['name'],
content['data'][i]['confirm'],
content['data'][i]['dead'],
content['data'][i]['heal']]
df.to_csv('F://data.csv',index=0,encoding='utf-8')
print('爬取完成')

快速入门

文章目录
  1. 1. 准备
    1. 1.0.1. pip包管理命令
    2. 1.0.2. 安装requests
    3. 1.0.3. 安装Selenium
    4. 1.0.4. print
  • 2. python基础
    1. 2.0.1. 数与表达式
    2. 2.0.2. 标准数据类型
    3. 2.0.3. 字符串截取
    4. 2.0.4. 模块
    5. 2.0.5. 保留字
    6. 2.0.6. 注释
  • 3. urllib库
    1. 3.0.1. request解析库
    2. 3.0.2. bs4解析库
  • 4. 实例
    1. 4.0.1. 二维码
    2. 4.0.2. 个人名片
    3. 4.0.3. 爬取小说
    4. 4.0.4. 动态爬取数据
  • 快速入门
  • |