图书馆9楼真是个神仙楼层,可能以后会经常去这里学习吧,14楼如果不下雨的话也是个好去处。
python学习笔记6
¶requests库
¶文件上传
在读取网页时加入参数files
1 | import requests |
¶cookies
RequestsCookieJar类,可通过cookies.items()获取key和value
1 | import requests |
自定义cookies可以放在headers里
1 | headers = { |
也可以直接放在cookies里,但需要使用split分割字符串,转换为RequestsCookieJar类
1 | cookies = '' |
未完
python学习笔记5
¶requests库
¶基本函数
¶get()
请求网页,返回类型是Response
1 | import requests |
结果: <class ‘requests.models.Response’>
¶其他请求
1 | r = requests.post('http://httpbin.org/post') |
请求网页时可以同时传一些参数data,headers等,如:
1 | import requests |
¶fake_useragent库(小tip)
User-Agent伪装浏览器一长串懒得打的随机生成法
1 | from fake_useragent import UserAgent |
¶json()
解析返回结果,得到字典格式
1 | r = requests.get('http://httpbin.org/get') |
如果不是JSON格式,出现解析错误: json.decoder.JSONDecodeError
¶基本属性
¶text
网页内容(str)
¶cookies
类型: RequestsCookieJar(requests.cookies.RequestsCookieJar)
¶status_code
状态码
requests.codes可以查询状态码
1 | _codes = { |
如: requests.codes.ok或requests.codes[‘ok’]表示200
对于关键字不能使用前一种,如100 : continue
¶url
¶headers
¶history
请求历史
python学习笔记4
¶urllib库
¶parse模块
¶urlparse()
url解析
代码:
1 | from urllib.parse import urlparse |
结果:
1 | <class 'urllib.parse.ParseResult'> |
函数返回结果为ParseResult类型,包括6个部分:
- scheme: 协议(://前面)
- netloc: 域名(/前面)
- path: 访问路径(/后面)
- params: 参数(;后面)
- query: 查询条件(?后面),一般用作GET类型的URL
- fragment: 锚点(#后面),由于直接定位页面内部的下拉位置
即 scheme://netloc/path;params?query#fragment
¶参数
urlstring: 必填项
scheme: 默认协议
allow_fragments: 是否忽略fragment,如果是False,fragment部分会被解析为path,parameters或query的一部分。
¶urlunparse()
完成URL构造,接受一个可迭代对象,长度必须为6.
如 http://www.baidu.com/index.html;user?a=6#comment
1 | from urllib.parse import urlunparse |
¶urlsplit()
不解析params部分
代码:
1 | from urllib.parse import urlsplit |
结果
1 | SplitResult(scheme='https', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment') |
¶urlunsplit()
同理,与urlunparse(),长度必须是5
¶urljoin()
第一个参数:base_url(基础链接)
第二个参数:新的链接
base_url 提供了三项内容 scheme,netloc,path,如果这三项在新的链接里不存在,就予以补全;如果存在,就使用新的链接的部分。
¶urlencode()
构造GET请求参数
1 | from urllib.parse import urlencode |
结果为http://www.baidu.com?name=germey&age=12
¶parse_qs()
query转回字典
1 | from urllib.parse import parse_qs |
结果为{‘name’: [‘germey’], ‘age’: [‘12’]}
¶parse_qsl()
另一种方法,转换为元组
1 | from urllib.parse import parse_qsl |
结果为[(‘name’, ‘germey’), (‘age’, ‘12’)]
¶quote()
中文参数转化为URL编码
1 | from urllib.parse import quote |
结果为https://www.baidu.com/s?wd=%E9%87%8E%E7%8B%BC%E5%8C%B9
¶unquote()
URL编码转换为中文
1 | from urllib.parse import unquote |
结果为https://www.baidu.com/s?wd=野狼匹
¶robotparser模块
首先创建一个RobotFileParser对象
rp = RobotFileParser()
创建时可传入链接,如
rp = RobotFileParser('http://www.jianshu.com/robots.txt')
几个函数的应用
- set_url(): 创建时未传入链接,可以使用这个函数设置robots.txt文件
- read(): 读取robots.txt文件并分析(未读取将全是False)
可以直接查看源代码,read()其实就是urlopen()+parse(),但是read()函数有一个坏处,当你打开错误时,只会全部允许或者全不允许,于是我入坑了,简书的robots文件必须伪造成浏览器才能打开,结果是导致403而不知道,结果所有网站都是False,建议直接自行使用urlopen()+parse()。
-
parse():解析robots文件
urlopen()+parse()方法+伪装浏览器方法
1
2
3
4
5
6
7from urllib.robotparser import RobotFileParser
from urllib.request import urlopen
import urllib.request
rp = RobotFileParser()
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'}
req = urllib.request.Request(url='http://www.jianshu.com/robots.txt', headers=headers)
rp.parse(urlopen(req).read().decode('utf-8').splitlines())主要方便之处如果产生错误直接抛出,自己可以手动解决。
-
can_fetch(): 传入User-agent 和URL,返回是否可抓取
1
print(rp.can_fetch('*', 'http://www.jianshu.com/p/a4be10076a6e'))print(rp.can_fetch('*', 'http://www.jianshu.com/search?q=python&page=1&typr=collections'))
结果是True和False
-
mtime(): 返回上次抓取和分析robots.txt的时间
-
modified():将当前时间设置为上次抓取和分析robots.txt的时间
python学习笔记3
¶urllib库
¶request模块
¶BaseHandler类
Handler的父类,基本函数有default_open(),protocol_request()
¶Hander子类
¶HTTPDefaultErrorHandler
用于处理HTTP响应错误
¶HTTPRedirectHandler
用于处理重定向
¶HTTPCookieProcessor
用于处理cookies:
¶字典处理
使用http.cookiejar.CookieJar()创建cookie
使用HTTPCookieProcessor创建handle并传入cookie
build_opener()创建opener并open()
1 | import http.cookiejar |
¶保存cookie
使用MozillaCookieJar(filename)或LWPCookieJar(filename)创建cookie
使用cookie.save(ignore_expires=True, ignore_discard=True)保存文件
1 | import http.cookiejar |
¶读取cookie
使用cookie.load(filename, ignore_discard=True, ignore_expires=True)读取cookie文件
1 | import http.cookiejar |
¶ProxyHandler
设置代理
使用ProxyHandler,传入参数为字典
使用build_opener(handler)构建opener
使用open()函数打开
1 | from urllib.request import ProxyHandler, build_opener |
¶HTTPPasswordMgr
用于管理密码
¶HTTPBasicAuthHandler
用于管理认证:
构建HTTPPasswordMgrWithDefaultRealm对象p
使用add_password加入账号密码和url
构建HTTPBasicAuthHandler对象时参数p
使用build_opener创建opener对象
使用open()函数打开
1 | from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener |
¶error模块
¶URLError类
继承自OSError类,是error模块的基类
具有reason属性表示异常内容
¶HTTPError类
URLError的子类,专门用来处理HTTP请求错误
属性:
- code: 返回HTTP状态码,404表示网页不存在,500表示服务器内部错误
- reason: 返回错误原因
- headers: 返回请求头
例如:
1 | from urllib import request, error |
¶注意
reason属性可能是一个对象而不是字符串,例如socket.timeout类
1 | import socket |
python学习笔记2
¶urllibk库
¶request模块
¶urlopen()
Api:
1 | urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None) |
-
url:字符串url或Request类
-
data:字典类需要转码为字节流,如:
1 | data = bytes(urllib.parse.urlencode('word': 'hello'), encoding='utf8') |
-
timeout:设置超时时间,超出这个时间未响应,抛出URLError异常,属于urllib.error模块。
-
cafile:CA证书
-
capath:CA证书路径
-
cadefault:已弃用,默认False
-
context:ssl.SSLContext类型,指定SSL设置,实现SSL加密传输。
¶Request类
urllib.request.Request
1 | class Request: |
-
url
-
data:和上面一样,必须传 bytes (字节流)类型.。
-
heads:请求头,也可以调用add_header()添加。
包括:
-
Accept:浏览器端可以接受的媒体类型,例如text/html表示html文档,*表示任意类型
-
Accept-Encoding
-
Accept-Language
-
Connection:
例如: Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
-
Host
-
Referer
-
User-Agent:
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)。
伪装浏览器
-
Cache-Control
-
Cookie
用法:
1 | headers = { |
- origin_req_host:请求方的host名称或IP地址
- unverifiable:这个请求是否无法验证,默认False
- method:字符串,指定请求使用的方法,比如GET,POST,PUT。
¶HTTPResponse
¶urlopen()返回类型
1 | import urllib.request |
输出结果:<class ‘http.client.HTTPResponse’>
¶使用函数
read() 返回的网页内容
print(response.read().decode('utf-8'))
readinto()
getheader(name)
getheaders()
fileno()
¶属性
msg
version
status 200表示成功,404表示网页未找到
reason
debuglevel
closed
python学习笔记1
¶Anaconda
“开始 → Anaconda3(64-bit)→ 右键点击Anaconda Prompt → 以管理员身份运行”,在Anaconda Prompt中输入conda list
,可以查看已经安装的包名和版本号。
chromedriver – Chrome
geckodriver – Firefox
PhantomJS
git学习笔记
¶安装git
设置名字和邮箱
1 | git config --global user.name "Your Name" |
创建目录
mkdir name
显示目录
pwd
创建git
git init
创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,id_rsa
是私钥,id_rsa.pub
是公钥。
¶使用git
添加、提交文件
git add file
git commit -m "message"
工作区状态
git status
查看修改
git diff file
¶控制版本
HEAD为当前版本,HEAD为上一个版本,HEAD为上上一个版本,HEAD100为往上100个版本
切换版本
git reset --hard commit_id/HEAD^number
查看提交历史/命令历史
1 | git log |
--pretty=oneline
(加上该参数会更简洁)
简洁图表
1 | git log --graph --pretty=oneline --abbrev-commit |
分叉提交历史整理成直线
git rebase
撤销工作区的修改
git checkout -- file
删除文件/版本库中删除文件
rm file
1 | git rm file |
¶远程仓库
关联
1 | git remote add origin address |
address是github ssh地址,origin是远程仓库地址
国内有类似github的平台:gitee,优点是下载速度比较快
推送
git push (-u) origin master/branch
第一次push要加-u 远程和本地的master关联起来
克隆
git clone address
查看远程信息
git remote (-v)
创建远程库其他分支
1 | git checkout -b branch origin/branch |
从远程抓取分支
git pull
¶分支的使用
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
强行删除分支:git branch -D <name>
分支合并图:git log --graph
强制禁用Fast forward
模式,在合并时添加信息
1 | git merge --no-ff -m "message" branch |
¶储存工作区
隐藏:git stash
查看:git stash list
恢复:git stash apply
删除:git stash drop
恢复并删除:git stash pop
恢复指定:git stash apply stash@{number}