Python爬虫实践 —— 3.利用爬虫提取返回值,模拟有道词典接口

有道词典的web接口,实际上可以用爬虫模拟,输入key,拼接为有道词典接口的formdata,爬取返回值,实际为Ajax动态生成的translation,这样外部来看实现了翻译接口的模拟,相当于爬虫模拟浏览器调用了有道词典web接口,其实讲真的话来说,直接调用有道web接口,传json参数就可以了,不用这么费事,但爬虫模拟了人登陆web,输入关键词,获得翻译结果的过程。

浏览器输入操作,解析有道词典翻译的web接口url和格式

#爬虫模拟调用有道词典web接口调用
from urllib import request
from urllib import parse
import re

class YoudaoTranslator:

    def __init__(self, key):
        self.key = key

    def __getData(self):
        # 构造 有道词典web接口所需的Form data
        formdata = {
            "i": self.key,
            "from": "AUTO",
            "to": "AUTO" ,
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": "15763837022114",
            "sign": "2b12fd214e066f53bc3455a126d7a509",
            "ts": "1576383702211",
            "bv": "5575008ba9785f184b106838a72d6536",
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME"
        }
        data = parse.urlencode(formdata).encode(encoding="utf-8")
        return data

    def __getPage(self):
        #获得模拟浏览器请求,获得Ajax返回值
        header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"}
        url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"

        req = request.Request(url, data=YoudaoTranslator.__getData(self), headers=header)
        res = request.urlopen(req).read().decode()
        return res

    def __Pat(self):
        #解析ajax返回json字符串,正则匹配获取翻译值
        pat = r‘"tgt":"(.*?)"}]]‘
        result = re.findall(pat, YoudaoTranslator.__getPage(self))
        print(result[0])
        return result

    def Translator(self):
        YoudaoTranslator.__Pat(self)

if __name__ == ‘__main__‘:

    i = YoudaoTranslator("人格心理学")
    i.Translator()

然后是运行结果

原文地址:https://www.cnblogs.com/liuchaodada/p/12044217.html

时间: 2024-08-29 08:52:19

Python爬虫实践 —— 3.利用爬虫提取返回值,模拟有道词典接口的相关文章

Java多线程和并发(四),线程返回值获取方式和Callable接口

目录 1.主线程等待法 2.使用Thread类的join()阻塞当前线程,等待子线程执行完毕 3.通过Callable接口实现:通过FutureTask Or线程池获取 四.线程返回值获取方式和Callable接口 1.主线程等待法 public class CycleWait implements Runnable{ private String value; @Override public void run() { try { Thread.currentThread().sleep(50

python学习系列之python装饰器基础(2)---装饰含返回值的函数

在上篇基础(1)中,我写了一个装饰器及使用方法,但是如果遇到一个函数带返回值的话,就不好使了,因此重写一个装饰器如下: #basic2.py #coding:utf-8 def auth(func):     def inner(*arg, **kwargs):         print 'before'         temp = func(*arg,**kwargs) #这行是关键,func相当于fetch_server_list         print 'after'       

python 复习 4-1 函数、参数、返回值、递归

函数 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名 可以通过函数名在程序不同地方多次执行,即函数调用 预定义函数(可以直接使用) 自定义函数(自编写的) 函数的定义: def 函数句([参数列表]): //定义 ``` def hello (): print(hello world) #### 函数的调用: - 函数名([参数列表]) //调用 hello() #### 函数的参数: 形式参数和实际参数 - 在定义函数时,函数名后面的括号中的变量名

Python函数中的变量和函数返回值

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x   //声明 x +=1 print x fun() print x 外部变量被改: x = 100 de

Python函数中的变量和函数返回值的使用实例

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x //声明 x +=1 print x fun() print x 外部变量被改: x = 100 def

python自增自减?赋值语句返回值?逗号表达式?

咳咳,直接进入正题吧. 自增自减(++/--),以及赋值语句,还有逗号表达式都是在C/C++中常见的运算符或表达式. 熟悉C/C++的小伙伴们都知道,在C/C++中: 自增自减(前缀/后缀)运算符将实现对变量值的 加1/减1:  类似 x = 0; ++x;的语句会使最终 x 的值为1 赋值语句将所赋的值作为该语句的返回值(值传递):  类似 (x = func()) > 0; 的语句会将函数 func()的返回值赋给 变量x ,并继续执行 x > 0的条件判断语句,这样的语句在C/C++中显

#跟着教程学# 3、Python基础 //Maya select和ls命令返回值问题

脚本编程 execfile('c:/*py') #括号里填要指定的py文件路径就可以执行了. 脚本中有中文,需要在开头加上 # coding=utf-8 表达式与操作符 专业术语,例如2+2,‘2’称为值,'+'为运算符,‘2+2’这个表达式是求值. 运算符,包括 赋值运算符: =简单的赋值运算 +=加法赋值运算 -=减法赋值运算 *= /= %= //=取整除赋值运算符 算术运算符:+    -    *    /    %    //    ** 关系运算符:==    >    <   

Python开发实用技巧:获取部分返回值的4种方式

python的函数支持返回多个值.返回多个值时,默认以tuple的方式返回. 例如,下面两个函数的定义是完全等价的. 1 def f(): 2 return 1,2 3 4 def f(): 5 return (1,2) 如果将函数调用的返回值赋值给对应个数的变量,它会一一对应的赋值,这很容易理解.下面是等价的: 1 a, b = f() # a=1, b=2 2 (a, b) = f() 如果赋值给一个变量,将会把整个元组赋值给变量.下面是等价的,a表示整个元组(1,2): 1 a = f()

TControl.Perform是有返回值的,且看VCL框架如何利用消息的返回值(全部例子都在这里)

代码如下: function TControl.Perform(Msg: Cardinal; WParam, LParam: Longint): Longint; var Message: TMessage; begin Message.Msg := Msg; Message.WParam := WParam; Message.LParam := LParam; Message.Result := 0; if Self <> nil then WindowProc(Message); Resu