1.print
print"111" #2
print("111") #3
2.input
防止input的非法输入,一般在py2中使用raw_input(),py3直接使用input即可。
3.try except
try:
....
except exception,e: #py2
...
try:
...
except exception as e: #py3
...
4.打开文件
py2可用file或者open;py3只可open
5chr() & ord()
python 2.4.2以前
chr( K ) 将编码K 转为字符,K的范围是 0 ~ 255
ord( c ) 取单个字符的编码, 返回值的范围: 0 ~ 255
python 3.0
chr( K ) 将编码K 转为字符,K的范围是 0 ~ 65535
ord( c ) 取单个字符的编码, 返回值的范围: 0 ~ 65535
Spider
1.代理授权验证
HTTPPasswordMgrWithDefaultRealm()
类将创建一个密码管理对象,用来保存 HTTP 请求相关的用户名和密码,主要应用两个场景:
- 验证代理授权的用户名和密码 (
ProxyBasicAuthHandler()
) - 验证Web客户端的的用户名和密码 (
HTTPBasicAuthHandler()
)
2.web客户端验证(客户端验证主要可以防止用户乱写,之后提交会增加服务器的压力,同时验证数据的填写是否符合标准;写服务端验证就是为了防止一些不地道的人,不通过正常渠道访问你写的系统,差不多就这样吧)
HTTPBasicAuthHandler处理器。
如果我们有客户端的用户名和密码,我们可以通过下面的方法去访问爬取:
#python2
import urllib
import urllib2
# 用户名
user = "test"
# 密码
passwd = "123456"
# Web服务器 IP
webserver = "http://192.168.199.107"
# 1. 构建一个密码管理对象,用来保存需要处理的用户名和密码
passwdmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
# 2. 添加账户信息,第一个参数realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 Web服务器、用户名、密码
passwdmgr.add_password(None, webserver, user, passwd)
# 3. 构建一个HTTP基础用户名/密码验证的HTTPBasicAuthHandler处理器对象,参数是创建的密码管理对象
httpauth_handler = urllib2.HTTPBasicAuthHandler(passwdmgr)
# 4. 通过 build_opener()方法使用这些代理Handler对象,创建自定义opener对象,参数包括构建的 proxy_handler
opener = urllib2.build_opener(httpauth_handler)
# 5. 可以选择通过install_opener()方法定义opener为全局opener
urllib2.install_opener(opener)
# 6. 构建 Request对象
request = urllib2.Request("http://192.168.199.107")
# 7. 定义opener为全局opener后,可直接使用urlopen()发送请求
response = urllib2.urlopen(request)
# 8. 打印响应内容
print response.read()
cookielib库 和 HTTPCookieProcessor处理器
cookielib
模块:主要作用是提供用于存储cookie的对象
HTTPCookieProcessor
处理器:主要作用是处理这些cookie对象,并构建handler对象。
in python2
import cookielib,urllib2
in python3
import http.cookiejar,urllib.request
ERROR[SSL]:certificate_verify_failed问题
产生这个问题的原因在于python本身,pyhon升级到2.7.9以后,引入了一个新特性,当使用urllib打开https的链接时,会检验一次ssl证书。而当目标网站使用的是自签名证书时,就会抛出urllib2.URLError的错误。(这里虚拟机就是用的自带的签名证书,所以我们从服务器连接vmware时会出现这种错误)
1.全局取消证书验证
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.使用ssl创建未验证的上下文,在url中传入上下文参数(当项目整体非常重视安全问题时,推荐这种方式,可以局部取消证书验证)
import ssl
context = ssl._create_unverified_context()
.......
urllib2.urlopen('目标网址',context=context).read()
Request模块
GET请求(headers【定义浏览器的头信息】&parmas[即查询参数例如kb]参数)
kw = {'wd':'长城'}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)
POST请求(最基本的get可以用post方法)
response = requests.post("http://www.baidu.com/", data = data)
代理(proxies)
response = requests.get("http://www.baidu.com", proxies = proxies)
非结构化数据和结构化数据提取
1.结构化数据的处理
JSON 文件
- JSON Path
- 转化成Python类型进行操作(json类)
XML 文件
- 转化成Python类型(xmltodict)
- XPath
- CSS选择器
- 正则表达式
2.非结构化数据的处理
文本、电话号码、邮箱地址
- 正则表达式
HTML 文件
- 正则表达式
- XPath
- CSS选择器