urllib学习之爬虫

1、urllib其实是一个包,包括了四个模块:

urllib.request:用于打开和读取 URL

urllib.parse:用于分解url

urllib.error:包括了ullib.request产生的异常

urllib.robotparser:分解robots.txt文件

 

2、来说一下具体用法

比如用于访问百度

首先调用urllib包中request模块,然后用urlopen方法打开URL

另外打印的结果感觉像乱码,实际这是二进制码。需要对其进行解码代码如下:

html=html.decode("utf-8")

print(html)

#要根据网页所使用的编码体制来决定解码,在有道网站上,上面的语句运行后没问题,在百度上,则用utf-8无法解码,搞不清什么原因

 

3、下载一只猫的例子

http://placekitten.com/g/200/300下载一张猫的图片

 

#导入request模块
import urllib.request
#打开网站
response=urllib.request.urlopen('http://placekitten.com/g/200/300')
#将网站的回复赋值给变量cat_img
cat_img=response.read()
#以wb的方法打开文件cat.jpg,因为网站读下来的数据是二进制
with open('cat.jpg','wb') as f:
#将变量cat_jpg写入文件cat.jpg
    f.write(cat_img)

 

实际运行后确实生成了一个cat的jpg文件,但无法打开

原因可能为网站的问题,我之前成功打开网站,也运行成功了。这次网站打不开,所以也下载了空文件。实际原因待查

 

4、用程序实现有道翻译

用程序实现有道翻译实际是模拟人工访问有道翻译的模式,将其用程序实现

首先用python中的url包中的模块实现访问提交数据,然后获得其接口

但在实际运行以下程序时,发现实际不能正常运行,不知道为什么

运行上述程序后,其结果如下,显示待翻译内容不能获取

 

# coding=utf-8

"""
created on 2018/3/11
@author:hewp
程序作用:
"""
#引入urllib.request模块和parse模块
import urllib.request
import urllib.parse
#引入json模块,json是一种轻量级的网络数据交换格式,此处调用用于解析URL数据
import json


content=input("请输入需要翻译的内容:")
#输入网站request地址,在网页审查元素中获取
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc'

#定义一个头文件字典,用于存储头文件中的数据
head={}

#以下数据从审查元素中直接复制过来
head['Referer']='http://fanyi.youdao.com/'
head['User-Agent']='Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
 Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40'
#data字典中的数据从审查元素中直接复杂
data = {
        "type" : "AUTO",
        "i" : content,
        "doctype" : "json",
        "xmlVersion" : "1.8",
        "keyfrom" : "fanyi.web",
        "ue" : "UTF-8",
        "action" : "FY_BY_CLICKBUTTON",
        "typoResult" : "true"
    }


data=urllib.parse.urlencode(data).encode('utf-8')

req=urllib.request.Request(url,data,head)
response=urllib.request.urlopen(req)
html=response.read().decode('utf-8')
#此处是为了获取解析html中的内容
target=json.loads(html)
#此处打印中的内容是为了获取键translateResult对应的值
print("翻译结果: %s" (target['translateResult'][0][0]['tgt']))

5、使用代理来访问网站

此点没有实现,代码如下,对代理的机制不太了解,没找到代理ip要专门学习http中网络技术的机制,得专门学习

代码如下:

#程序说明:该程序是使用代理来访问文章,以此避免网站对”非人类“访问的拒绝
import urllib.request

url='http://www.whatismyip.com/'
proxy_support=urllib.request.ProxyHandler({'http':'211.138.121.38:80'})
#创建一个包含代理IP的opener
opener=urllib.request.build_opener(proxy_support)
#安装进默认环境
urllib.request.install_opener(opener)
#试试看IP地址改了没
response=urllib.request.urlopen(url)
html=response.read().decode('utf-8')
print(html)

运行结果如下 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值