对有道翻译进行爬取

先放上代码

#模块导入
import urllib.request
import urllib.parse
import json
#用户输入
sentence=input("请输入要翻译的句子:")
#实现翻译的网址
url="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
#构建表单字典
data={}
data['i']= str(sentence)
data['from'] = 'AUTO'
data['to']= 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '1534614649372'
data['sign'] = '96714dfadac2ced54a30097038d2cfd1'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data['typoResult']= 'false'
data=urllib.parse.urlencode(data).encode('utf-8')
#构建Request实例
req=urllib.request.Request(url,data)
req.add_header('User-Agent',' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36')
#获取请求
response = urllib.request.urlopen(req)
#请求处理
html=response.read().decode("utf-8")
target=json.loads(html)
#输出显示
display="翻译结果为:"+target['translateResult'][0][0]['tgt']
print(display)

**urllib.request.urlopen()中的data参数:** 浏览器和服务器请求的方式有两种:GET和POST GET用于从服务器获得数据(有时也会用于传递) POST用于向服务器传递数据 data 参数是可选的,默认为None,如果你没有传递这个 data 参数,那么你的请求方式默认为GET,如果你传递了这个 data 参数,它的请求方式就不再是 GET 方式请求,而是 POST 。

import urllib.parse
import urllib.request
data = urllib.parse.urlencode({'word': 'hello'}).encode('utf-8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

urllib.parse.urlencode(dict).encode(‘utf-8’)
这一句是将data字典转化为特殊字符串并以’utf-8’的形式编码
这样做是由于urlopen()方法中对data参数的格式有特殊的要求

urllib.request.Request的使用
由上我们知道利用 urlopen() 方法可以实现最基本的请求发起,但这几个简单的参数并不足以构建一个完整的请求,如果请求中需要加入 headers 等信息,我们就可以利用更强大的 Request 类来构建一个请求。

import urllib.request
 
request =urllib.request.Request("https://www.baidu.com")
response = urllib.request.urlopen(request)
print(response.read().decode("utf-8"))

可以发现,我们依然是用 urlopen() 方法来发送这个请求,只不过这次 urlopen() 方法的参数不再是一个URL,而是一个 Request ,通过构造这个这个数据结构,一方面我们可以将请求独立成一个对象,另一方面可配置参数更加丰富和灵活。

下面我们看一下 Request 都可以通过怎样的参数来构造,它的构造方法如下。

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

data 参数如果要传必须传 bytes (字节流)类型的,如果是一个字典,可以先用 urllib.parse.urlencode() 编码。

headers 参数是一个字典,你可以在构造 Request 时通过 headers 参数传递,也可以通过调用 Request 对象的 add_header(key,value) 方法来添加请求头。如:

#通过改变headers中的'User-Agent'来达到伪装的目的
req=urllib.request.Request(url,data)
req.add_header('User-Agent',' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36')

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Scrapy是一个强大的Python开源网络爬虫框架,可以用来快速、高效地爬取网页信息。下面我将以使用Scrapy框架爬取有道翻译为例,简要介绍如何进行爬取。 首先,我们需要创建一个Scrapy项目。打开命令行工具,输入以下命令: scrapy startproject youdao_translate 这将在当前目录下创建一个名为"youdao_translate"的Scrapy项目。接下来,进入项目目录并创建一个名为"translator"的爬虫,命令如下: cd youdao_translate scrapy genspider translator www.youdao.com 这将在项目目录下的spiders文件夹中生成一个名为"translator.py"的文件,我们可以在文件中编写爬虫代码。 打开"translator.py"文件,我们需要设置爬虫的起始URL和解析方法。首先,在文件的开头添加以下代码: start_urls = ['http://www.youdao.com/'] 然后,找到"def parse(self, response):"这一行,在该方法中编写解析页面的代码,如下所示: def parse(self, response): result = response.xpath('//div[@id="inputTranslation"]/ul/li/text()').extract_first() yield { 'translation': result, } 在这个示例中,我们使用XPath语法来提取翻译结果所在的标签,并将结果存储在一个字典中。通过使用yield关键字,我们将字典作为爬取结果返回。 接下来,保存文件并返回命令行工具。在命令行中输入以下命令即可启动爬虫: scrapy crawl translator Scrapy将会开始爬取并显示爬取过程的日志信息。当爬取完成后,结果将保存在默认的JSON文件中,您可以在项目目录下找到该文件。 以上就是使用Scrapy框架爬取有道翻译的简要流程。当然,具体的爬取过程可能因网站的结构和数据布局而有所不同,您可以根据实际情况进行调整和改进。希望对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值