版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.1小小翻译器功能介绍小小翻译器使用百度翻译开放平台提供了API,实现简单的翻译功能,输入自己需要翻译的单词或者句子,即可得到翻译的结果,运行运行界面如图4-1。该翻译器不仅能够英文翻译成中文,也可以中文翻译成英文,或者其他语言。百度翻译开放平台提供了API,可以为我们提供高质量的翻译服务。通过调用百度翻译API编写在线翻译程序。开发者申请链接:/api/trans/product/index详细的文档:/api/trans/product/apidoc按照百度翻译开放平台文档中要求,生成URL请求网页,提交后可返回JSON数据格式的翻译结果,再将得到的JSON格式的翻译结果解析出来。4.2程序设计的思路4.3关键技术1.相关HTTP协议知识2.urllib库使用urllib是Python标准库中最为常用的Python网页访问的模块,它可以让你像访问本地文本文件一样读取网页的内容。获取请求网页信息、向服务器发送数据、获取服务器响应信息JSONimportjson4.百度翻译开放平台提供了API相关HTTP协议知识HTTP工作流程相关HTTP协议知识而我们现在的一般使用的HTTP1.1协议解析网页过程是不同的,在1.1版本中同一个连接可以包含多个请求和对应响应。但是其原理是不变的。如图:URL就是统一资源定位符(UniformResourceLocator),它的一般格式如下:protocol://hostname[:port]/path/[;parameters][?query]#fragmentURL的格式由三部分组成:(1)protocol:第一部分就是协议,例如百度使用的就是https协议;(2)hostname[:port]:第二部分就是主机名(还有端口号为可选参数),一般网站默认的端口号为80,例如百度的主机名就是,这个就是服务器的地址;(3)path:第三部分就是主机资源的具体地址,如目录和文件名等。网络爬虫应用一般分为两个步骤:①通过网络链接获取网页内容;②对获得的网页内容进行处理。URL统一资源定位符urllib是Python标准库中最为常用的Python网页访问的模块,我们可以使用urlib这个库抓取网页。urllib库urllib是一个URL处理包,这个包中集合了一些处理URL的模块,如下:(1)urllib.request模块是用来打开和读取URL的;(2)urllib.error模块包含一些有urllib.request产生的错误,可以使用try进行捕捉处理;(3)urllib.parse模块包含了一些解析URL的方法;(4)urllib.robotparser模块用来解析robots.txt文本文件。它提供了一个单独的RobotFileParser类,通过该类提供的can_fetch()方法测试爬虫是否可以下载一个页面。1.获取网页信息urllib.request和urllib.parse模块urlopen()函数格式:urllib.urlopen(url[,data[,proxies]])urlopen返回的response对象提供了如下方法:read(),readline(),readlines(),fileno(),close():这些方法的使用方式与文件对象完全一样;info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息;getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;geturl():返回请求的url;了解到这些,我们就可以写一个最简单爬取网页的程序。#urllib_test01.pyfromurllibimportrequestif__name__=="__main__":response=request.urlopen("")#返回response对象html=response.read()html=html.decode("utf-8")#decode()命令将网页的信息进行解码否则乱码
print(html)Response对象status属性、reason属性、url属性是返回页面URL200OK404文件不存在1.获取网页信息urllib.request和urllib.parse模块
urlopen()函数格式:urllib.urlopen(url[,data[,proxies]])url参数不仅可以是一个字符串,例如:。url也可以是一个Request对象req=request.Request("/")#Request对象
response=request.urlopen(req)html=response.read()html=html.decode("utf-8")print(html)注意,如果要把对应文件下载到本地,可以使用urlretrieve()函数。fromurllibimportrequestrequest.urlretrieve("/_mediafile/index/2017/06/24/1qjdyc7vq5.jpg","aaa.jpg")2.获取服务器响应信息urllib.request和urllib.parse模块
request.urlopen()代表请求过程,它返回的Response对象代表响应。
Response对象status属性返回请求HTTP后的状态,在处理数据之前要先判断状态情况。如果请求未被响应,需要终止内容处理。reason属性非常重要,可以得到未被响应的原因,url属性是返回页面URL。Response.read()是获取请求的页面内容的二进制形式。3.向服务器发送数据urllib.request和urllib.parse模块GET请求获取信息,但GET也可以提交,与POST的区别如下。GET方式可以通过URL提交数据,待提交数据是URL的一部分;/cgi-bin/frame_html?sid=Ue_eGBSB7&password=b44e918采用POST方式,待提交数据放置在HTMLHEADER内。2)GET方式提交的数据最多不超过1024二字节,POST没有对提交内容的长度限制。urllib.request和urllib.parse模块如果没有设置urlopen()函数的data参数,HTTP请求采用GET方式,也就是我们从服务器获取信息,如果我们设置data参数,HTTP请求采用POST方式,也就是我们向服务器传递数据。data参数有自己的格式,具体格式我们不用了解,因为我们可以使用urllib.parse.urlencode()函数将字符串自动转换成上面所说的格式。下面是发送data实例,向“百度翻译”发送要翻译数据data,得到翻译结果。urllib.request和urllib.parse模块#创建Form_Data字典,存储向服务器发送的Data
Form_Data={'from':'en','to':'zh','query':en_str,'transtype':'hash'}#创建Form_Data字典,存储向服务器发送的Data
Form_Data={}Form_Data['from']='en'Form_Data['to']='zh'Form_Data['query']=en_str#要翻译数据Form_Data['transtype']='hash'URL='http:///v2transapi?from=en&to=zh&query=hello%20world&transtype=hash'
data=parse.urlencode(Form_Data).encode('utf-8')#使用urlencode方法转换标准格式response=request.urlopen(URL,data)#传递Request对象和转换完格式的数据html=response.read().decode('utf-8')#读取信息并解码translate_results=json.loads(html)
#使用JSON#print(translate_results)
#打印出JSON数据translate_results=translate_results['trans_result']['data'][0]['dst']#找到翻译结果print("翻译的结果是:%s"%translate_results)#打印翻译信息我们得到的JSON数据如下:{'logid':4137673849,'liju_result':{'double':'','single':''},'trans_result':{'from':'en','domain':'all','keywords':[],'phonetic':[{'src_str':'美','trg_str':'měi'},{'src_str':'丽','trg_str':'lì'},{'src_str':'的','trg_str':'de'}],'to':'zh','data':[{'result':[[0,'美丽的',['0|8'],[],['0|8'],['0|9']]],'relation':[],'src':'beatiful','dst':'美丽的'}],'status':0,'type':2},'dict_result':[]}向“百度翻译”发送要翻译数据4.使用UserAgent隐藏身份
通过设置UserAgent的来达到隐藏身份的目的,UserAgent的中文名为用户代理,简称UA。UserAgent存放于Headers中,服务器就是通过查看Headers中的UserAgent来判断是谁在访问。想要设置UserAgent,有两种方法:1.在创建Request对象的时候,填入headers参数(包含UserAgent信息),这个Headers参数要求为字典;2.在创建Request对象的时候不添加headers参数,在创建完成之后,使用add_header()的方法,添加headers。urllib.request和urllib.parse模块4.使用UserAgent隐藏身份
方法一:fromurllibimportrequestif__name__=="__main__":#以CSDN为例,CSDN不更改UserAgent是无法访问的url='/'head={}#写入UserAgent信息head['User-Agent']='Mozilla/5.0(Linux;Android4.1.1;Nexus7Build/JRO03D)AppleWebKit/535.19(KHTML,likeGecko)Chrome/18.0.1025.166Safari/535.19'req=request.Request(url,headers=head)#创建Request对象response=request.urlopen(req)#传入创建好的Request对象html=response.read().decode('utf-8')#读取响应信息并解码print(html)#打印信息urllib.request和urllib.parse模块4.使用UserAgent隐藏身份
fromurllibimportrequestif__name__=="__main__":#以CSDN为例,CSDN不更改UserAgent是无法访问的
url='/'req=request.Request(url)#创建Request对象
req.add_header('User-Agent','Mozilla/5.0(Linux;Android4.1.1;Nexus7Build/JRO03D)AppleWebKit/535.19(KHTML,likeGecko)Chrome/18.0.1025.166Safari/535.19')#传入headersresponse=request.urlopen(req)#传入创建好的Request对象
html=response.read().decode('utf-8')#读取响应信息并解码
print(html)#打印信息urllib.request和urllib.parse模块12.3BeautifulSoup库BeautifulSoup(英文原意是美丽的蝴蝶)是一个Python处理HTML/XML的函数库,是Python内置的网页分析工具,用来快速地转换被抓取的网页。它产生一个转换后DOM树,尽可能和原文档内容含义一致,这种措施通常能够满足你搜集数据的需求。BeautifulSoup提供一些简单的方法以及类Python语法来查找、定位、修改一棵转换后DOM树。使用pip直接安装beautifulsoup4:pip3installbeautifulsoup4BeautifulSoup库的四大对象• Tag• NavigableString• BeautifulSoup(前面例子中已经使用过)• CommentTag对象就是HTML中的一个个标签,例如 <title>ThestoryofMonkey</title> <ahref="/elsie"id="link1">Elsie</a>上面的<title><a>等等HTML标签加上里面包括的内容就是Tag,下面用BeautifulSoup来获取Tags。 print(soup.title) print(soup.head)NavigableString对象我们已经得到了标签的内容,要想获取标签内部的文字怎么办呢?很简单,用.string即可,例如 soup.title.string这样我们就轻松获取到了标签里面的内容,如果用正则表达式则麻烦的多。BeautifulSoup对象(3)BeautifulSoup对象BeautifulSoup对象表示的是一个文档的全部内容。大部分时候可以把它当作Tag对象,是一个特殊的Tag,下面代码可以分别获取它的类型,名称,以及属性。 print(type(soup)#输出:<class'bs4.BeautifulSoup'> print()#输出:[document] print(soup.attrs)#输出空字典:{}Comment对象(4)Comment对象Comment注释对象是一个特殊类型的NavigableString对象,其内容不包括注释符号,如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。BeautifulSoup库操作解析文档树1.遍历文档树2.搜索文档树3.用CSS选择器筛选元素BeautifulSoup库操作解析文档树1.遍历文档树2.搜索文档树3.用CSS选择器筛选元素BeautifulSoup库操作解析文档树1.遍历文档树(1).content属性和.children属性获取直接子节点(2).descendants属性获取所有子孙节点(3)节点内容.string(4)多个内容.strings(5)父节点.parent(6)兄弟节点,.next_sibling属性获取了该节点的下一个兄弟节点,.previous_sibling则与之相反,如果节点不存在,则返回None。BeautifulSoup库操作解析文档树2.搜索文档树(1)find_all(name,attrs,recursive,text,**kwargs)find_all()方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件(2)find(name,attrs,recursive,text)它与find_al
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能工地设备管理方案
- 学校垃圾分类宣传及实践方案
- 钢筋施工材料采购与管理方案
- 旋挖桩施工中的安全隐患排查方案
- 环保型大坝加固施工方案
- 电厂进出道路硬化方案
- 高层建筑雨污水管道优化方案
- 商业建筑天面防水解决方案
- 幼儿园分餐制操作流程与标准
- 2023年护理行业工作总结与展望
- 辽宁省盘锦市第一完全中学2023-2024学年八年级上学期期中数学试卷
- DB13-T 5958-2024 金属非金属露天矿山采场边坡安全监测技术规范
- 七十岁老人换驾照考三力测试题库
- 医院康复科培训课件:《平衡功能评定及训练》
- 2024《整治形式主义为基层减负若干规定》全文课件
- 2025届高三数学一轮复习策略讲座
- 北京市八中2023-2024学年高二上学期期中生物试题 含解析
- 职能科室对医技科室医疗质量督查记录表(检验科、放射科、超声科、功能科、内镜室)
- PCBA审核表实用模板
- 后进生转化课件
- 螺纹规中径及公差计算
评论
0/150
提交评论