different between Py2&3

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 请求相关的用户名和密码,主要应用两个场景:

  1. 验证代理授权的用户名和密码 (ProxyBasicAuthHandler())
  2. 验证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选择器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值