爬虫0020:urllib2操作

2018-01-12  本文已影响21人  不一样的丶我们

目录清单


入门

# -*- coding:utf-8 -*-
# 添加指定编码的注释,表示当前源代码支持中文操作

import urllib2
# 引入需要的模块

response = urllib2.urlopen("http://www.taobao.com")
# 通过urlopen()方法请求淘宝网数据,获取到的响应数据保存在response中

print(response.read())
# 打印展示获取到的数据

python2 demo01.py
<!doctype html>
<html>
<head>
    <title>淘宝网 - 淘!我喜欢</title>
...
...
</html>

Requests对象

# -*- coding:utf-8 -*-
# 添加 注释,指定当前源代码支持中文操作

from urllib2 import Request, urlopen
# 引入需要的模块

request = Request("http://www.taobao.com")
# 访问目标网址,封装请求对象

response = urlopen(request)
# 发送请求,得到服务器响应数据,存储在变量response中

print(response.read())
# 打印展示响应的数据内容

请求头设置之UserAgent操作

# 添加注释,源代码支持中文
# -*- coding:utf-8 -*-

# 引入需要的模块
from urllib2 import Request, urlopen

# 定义访问的目标url地址
url = "http://www.taobao.com"

# 定义请求头信息
headers = {
    "User-agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",
    "info": "自定义消息",
}

# 构建请求对象
request = Request(url, headers=headers)

# 发送请求获得响应对象
response = urlopen(response)

# 打印展示信息
print(response.read())

请求处理方式get/post

# 添加注释,python2支持中文编码
# -*- coding:utf-8 -*-

# 引入需要的模块
from urllib2 import Request, urlopen
from urllib import urlencode

# 定义访问url地址和传递的数据
url = "http://www.baidu.com/s?"
data = {
    "wd": "火车票",
}

# 处理完整的请求
fullurl = url + urlencode(data)

# 构建请求对象
request = Request(fullurl)

# 发送请求获取响应数据
response = urlopen(request)

# 打印 展示 响应数据
print response.read()

# -*- coding:utf-8 -*-
from urllib2 import Request, urlopen
from urllib import urlencode

import time
import random
import hashlib
# 引入需要的模块

url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
# 真实翻译地址

n = raw_input("请输入要翻译的词汇:")
c = "fanyideskweb"
x = "aNPG!!u6sesA>hBAW1@(-"
r = str(int(time.time() * 1000) + random.randint(1, 10))
# 处理加密字段

sign = hashlib.md5(c + n + r + x).hexdigest()
# 加密字段


headers = {
    # "Host": "fanyi.youdao.com",
    # "Content-Length": "201",
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Origin": "http://fanyi.youdao.com",
    # "X-Requested-With": "XMLHttpRequest",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Referer": "http://fanyi.youdao.com/",
    # "Accept-Encoding": "gzip, deflate",
    # "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Cookie": "OUTFOX_SEARCH_USER_ID_NCOO=1092450716.3850443; OUTFOX_SEARCH_USER_ID=-1512266810@10.168.1.241; JSESSIONID=aaal2mcR1N1zx5rcovkdw; fanyi-ad-id=39535; fanyi-ad-closed=1; ___rl__test__cookies=1515335942852"
}
# 请求头设置


form_data = {
    "i": n,
    "from": "AUTO",
    "to": "AUTO",
    "smartresult": "dict",
    "client": c,
    "salt": r,
    "sign": sign,
    "doctype": "json",
    "version": "2.1",
    "keyfrom": "fanyi.web",
    "action": "FY_BY_REALTIME",
    "typoResult": "false",
}

data = urlencode(form_data)
# 请求的表单数据

request = Request(url, data=data, headers=headers)
# 构建请求对象

response = urlopen(request)
# 访问指定的url,得到响应对象数据

print(response.read())
# 打印展示获取的数据

自定义Opener开锁人

def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
            cafile=None, capath=None, cadefault=False, context=None):
    global _opener
    if cafile or capath or cadefault:
        if context is not None:
            raise ValueError(
                "You can't pass both context and any of cafile, capath, and "
                "cadefault"
            )
        if not _have_ssl:
            raise ValueError('SSL support not available')
        context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH,
                                             cafile=cafile,
                                             capath=capath)
        https_handler = HTTPSHandler(context=context)
        opener = build_opener(https_handler)
    elif context:
        https_handler = HTTPSHandler(context=context)
        opener = build_opener(https_handler)
    elif _opener is None:
        _opener = opener = build_opener()
    else:
        opener = _opener
    return opener.open(url, data, timeout)
# -*- coding:utf-8 -*-

import urllib2
# 引入需要的模块

handler = urllib2.HTTPSHandler()
# 创建一个HTTPS处理器对象

opener = urllib2.build_opener(handler)
# 构建一个开锁人对象

response = opener.open("https://www.taobao.com")
# 访问指定的数据

print response.read()
# 打印展示获取的数据

# -*- coding:utf-8 -*-

# 引入需要的模块
import urllib2

# 创建代理处理器
proxy_handler = urllib2.ProxyHandler({'http': '61.135.217.7:80'})

# 创建Opener对象
proxy_opener = urllib2.urlopen(proxy_handler)

# 打开指定的网址
response = proxy_opener.open("https://www.taobao.com")

# 打印展示获取的数据
print response.read()

这里对于代理ip地址做一个简要的说明
通常情况下,我们会看到代理服务器会有高匿、匿名、透明的一个描述,这个描述主要是用来作什么的呢?其实主要是在代理服务器这一侧,通过变量控制被代理的客户端是否对于访问的服务器可见,主要通过三个参数进行控制[REMOTE_ADDR, HTTP_VIA,HTTP_X_FORWARDED_FOR]

透明代理:服务器明确知道你用了代理,你的ip和代理的ip服务器都能直接获取

  • REMOTE_ADDR:proxy_ip
  • HTTP_VIA:proxy_ip
  • HTTP_X_FORWARDED_FOR:client_ip

匿名代理:服务器知道你用了代理,可以获取到代理服务器ip,但是获取不到你的ip

  • REMOTE_ADDR:proxy_ip
  • HTTP_VIA:proxy_ip
  • HTTP_X_FORWARDED_FOR:proxy_ip

高匿代理:服务器根本不知道你是否代理访问

  • REMOTE_ADDR:proxy_ip
  • HTTP_VIA:not datemined
  • HTTP_X_FORWARDED_FOR:not datemined
proxy_url = "188.68.16.55:80"
user = "damu"
passwd = "mu@!#13"
# format()函数和%符号一样,都是通过占位符的方式替换数据的
proxy_handler = urllib2.ProxyHandler("http://{}:{}@{}".format(proxy_url, user, passwd))

会话跟踪之cookie操作

# -*- coding:utf-8 -*-

# 引入需要的模块
import urllib2
import cookielib

# 创建一个基于cookie的核心操作对象
cookie = cookielib.CookieJar()

# 创建一个基于cookie的操作对象
cookie_handler = urllib2.HTTPCookieProcessor(cookie)

# 创建一个可以操作cookie的opener对象
cookie_opener = urllib2.build_opener(cookie_handler)

# 打开目标网站
response cookie_opener.open("http://fanyi.youdao.com")

# 查看cookie数据
for item in cookie:
    print item.name + "--" + item.value
# -*- coding:utf-8 -*-

# 引入需要的模块
import urllib2
imorot cookielib

# 创建基于cookie的核心操作对象
cookie = urllib2.MozillaCookieJar("youdao.txt")

# 创建基于cookie的操作对象
cookie_handler = urllib2.HTTPCookieProcessor(cookie)

# 创建可以操作Cookie的opener对象
cookie_opener = urllib2.build_opener(cookie_handler)

# 访问目标网站
response = cookie_opener.open("http://fanyi.youdao.com")

# 保存cookie到文件中
cookie.save()
# -*- coding:utf-8 -*-

# 引入需要的模块
import urllib2
import cookielib

# 创建基于cookie的核心对象
cookie = cookielib.CookieJar()

# 加载cookie文件中的数据
cookie.load("youdao.txt")

# 创建基于cookie的操作对象
cookie_handler = urllib2.HTTPCookieProcessor(cookie)

# 创建可以操作cookie的opener对象
cookie_opener = urllib2.build_opener(cookie_handler)

# 打开目标地址
response = cookie_opener.open("http://fanyi.youdao.com")

# ..其他代码请参考有道在线翻译爬虫程序

爬虫异常行为

# -*- coding:utf-8 -*-

# 引入需要的模块
import urllib2

# 定义请求对象
requset = urllib2.Request("http://www.dailiyun.com/damu")

# 使用try-except包裹请求
try:
    response = urllib2.urlopen(request)
    print(response.read())
except URLError, err
    print err.code
    print err
    
print "程序运行完成"
404
HTTP Error 404: Not Found
程序运行完成
# -*- coding:utf-8 -*-

# 引入需要的模块
import urllib2

# 定义请求对象
requset = urllib2.Request("http://www.baidu.com/damu")

# 使用try-except包裹请求
try:
    response = urllib2.urlopen(request)
    print(response.read())
except URLError, err
    print err.code
    print err
    
print("程序运行完成")
<!DOCTYPE html>
<html>
...
<html>
程序运行完成
上一篇下一篇

猜你喜欢

热点阅读