爬虫:爬取海词的翻译内容

在爬取海词的时候遇到了一个问题,在异步加载的时候,需要一个t值,但是这个t值是js加载出来的,直接拼接的,我们无法从网页中得到;

 当在搜索框输入单词的时候:你在干嘛

替换下图中的page的值就能达到翻页的目的:

那么当前的目的就是要能够找到这段js代码,同时获取对应输入的t的值,来重新组合url

真正的url只需要如下内容:

我提前把关键字和t都处理了,写成了字典的形式,

key:你在干嘛  ff[key]:WuqarCRs

{“你好”:“WuqarCRs”}  #提前处理成了这种,方便提取
url = "http://fuzz.dict.cn/dict/api.php?&action=fuzz&from=jsonp&q=" + key + "&t="+ ff[key]+"&page="

那么关键部分来了,我是如何获取T的呢。

大概思路,是在本地搭建一个服务器,然后输入每个词去访问这段js代码,然后返回给词的结果保存起来。

处理过程的代码:

第一步:先找到那段js代码,里面是如何把输入的文字转换成8位字符串的算法

第二步:先安装node.js 服务器,然后提取出来这段js代码,转换成node.js代码,如果不转换的话在浏览器里面直接访问时无法触发js加载的。

下面是node.js的代码,先执行node.js代码

var http = require(‘http‘);
var querystring = require(‘querystring‘);
var util = require(‘util‘);

http.createServer(function(req, res){
    var post = ‘‘;
    var mm = ‘‘

function dictCrypto(J) {
  function r(g, f) {
    var e, d, a, b, c;
    a = g & 2147483648;
    b = f & 2147483648;
    e = g & 1073741824;
    d = f & 1073741824;
    c = (g & 1073741823) + (f & 1073741823);
    if (e & d) {
      return c ^ 2147483648 ^ a ^ b
    }
    return e | d ? c & 1073741824 ? c ^ 3221225472 ^ a ^ b : c ^ 1073741824 ^ a ^ b : c ^ a ^ b
  }

  function I(g, f, e, d, a, b, c) {
    g = r(g, r(r(f & e | ~f & d, a), c));
    return r(g << b | g >>> 32 - b, f)
  }

  function s(g, f, e, d, a, b, c) {
    g = r(g, r(r(f & d | e & ~d, a), c));
    return r(g << b | g >>> 32 - b, f)
  }

  function w(g, f, e, d, a, b, c) {
    g = r(g, r(r(f ^ e ^ d, a), c));
    return r(g << b | g >>> 32 - b, f)
  }

  function v(g, f, e, d, a, b, c) {
    g = r(g, r(r(e ^ (f | ~d), a), c));
    return r(g << b | g >>> 32 - b, f)
  }

  function K(c) {
    for (var b = "++"; c > 0;) {
      var a = c % 64;
      b += a == 0 ? "+" : a == 1 ? "-" : a > 1 && a < 12 ? String.fromCharCode(a + 46) : a > 11 && a < 38 ? String.fromCharCode(a + 54) : String.fromCharCode(a + 59);
      c = (c - a) / 64
    }
    return b.substr(b.length - 2, 2)
  }

  function H(d) {
    var c = "",
      b = "",
      a;
    for (a = 0; a <= 3; a++) {
      b = d >>> a * 8 & 255;
      b = "0" + b.toString(16);
      c += b.substr(b.length - 2, 2)
    }
    return c
  }
  var x = [],G, L, q, p, F, E, D, C;
  J = function(d) {
      // var rrr = //;
      // d = d.replace(rrr,"");
      process.stdout.write(d +"***"+‘\n‘);
      process.stdout.write(typeof rrr);
    d = d.replace(/\r\n/g, "\n");

    for (var c = "",b = 0; b < d.length; b++) {
      var a = d.charCodeAt(b);
      if (a < 128) {
        c += String.fromCharCode(a)
      } else {
        if (a > 127 && a < 2048) {
          c += String.fromCharCode(a >> 6 | 192)
        } else {
          c += String.fromCharCode(a >> 12 | 224);
          c += String.fromCharCode(a >> 6 & 63 | 128)
        }
        c += String.fromCharCode(a & 63 | 128)
      }
    }
    c += String.fromCharCode(80, 97, 83, 115);
    if (global.dict_pagetoken) {
      c += global.dict_pagetoken
    }
    return c
  }(J);
  x = function(g) {
    var f, e = g.length;
    f = e + 8;
    for (var d = ((f - f % 64) / 64 + 1) * 16, a = Array(d - 1), b = 0, c = 0; c < e;) {
      f = (c - c % 4) / 4;
      b = c % 4 * 8;
      a[f] |= g.charCodeAt(c) << b;
      c++
    }
    a[(c - c % 4) / 4] |= 128 << c % 4 * 8;
    a[d - 2] = e << 3;
    a[d - 1] = e >>> 29;
    return a
  }(J);
  F = 1732584193;
  E = 4023233417;
  D = 2562383102;
  C = 271733878;
  for (J = 0; J < x.length; J += 16) {
    G = F;
    L = E;
    q = D;
    p = C;
    F = I(F, E, D, C, x[J + 0], 7, 3614090360);
    C = I(C, F, E, D, x[J + 1], 12, 3905402710);
    D = I(D, C, F, E, x[J + 2], 17, 606105819);
    E = I(E, D, C, F, x[J + 3], 22, 3250441966);
    F = I(F, E, D, C, x[J + 4], 7, 4118548399);
    C = I(C, F, E, D, x[J + 5], 12, 1200080426);
    D = I(D, C, F, E, x[J + 6], 17, 2821735955);
    E = I(E, D, C, F, x[J + 7], 22, 4249261313);
    F = I(F, E, D, C, x[J + 8], 7, 1770035416);
    C = I(C, F, E, D, x[J + 9], 12, 2336552879);
    D = I(D, C, F, E, x[J + 10], 17, 4294925233);
    E = I(E, D, C, F, x[J + 11], 22, 2304563134);
    F = I(F, E, D, C, x[J + 12], 7, 1804603682);
    C = I(C, F, E, D, x[J + 13], 12, 4254626195);
    D = I(D, C, F, E, x[J + 14], 17, 2792965006);
    E = I(E, D, C, F, x[J + 15], 22, 1236535329);
    F = s(F, E, D, C, x[J + 1], 5, 4129170786);
    C = s(C, F, E, D, x[J + 6], 9, 3225465664);
    D = s(D, C, F, E, x[J + 11], 14, 643717713);
    E = s(E, D, C, F, x[J + 0], 20, 3921069994);
    F = s(F, E, D, C, x[J + 5], 5, 3593408605);
    C = s(C, F, E, D, x[J + 10], 9, 38016083);
    D = s(D, C, F, E, x[J + 15], 14, 3634488961);
    E = s(E, D, C, F, x[J + 4], 20, 3889429448);
    F = s(F, E, D, C, x[J + 9], 5, 568446438);
    C = s(C, F, E, D, x[J + 14], 9, 3275163606);
    D = s(D, C, F, E, x[J + 3], 14, 4107603335);
    E = s(E, D, C, F, x[J + 8], 20, 1163531501);
    F = s(F, E, D, C, x[J + 13], 5, 2850285829);
    C = s(C, F, E, D, x[J + 2], 9, 4243563512);
    D = s(D, C, F, E, x[J + 7], 14, 1735328473);
    E = s(E, D, C, F, x[J + 12], 20, 2368359562);
    F = w(F, E, D, C, x[J + 5], 4, 4294588738);
    C = w(C, F, E, D, x[J + 8], 11, 2272392833);
    D = w(D, C, F, E, x[J + 11], 16, 1839030562);
    E = w(E, D, C, F, x[J + 14], 23, 4259657740);
    F = w(F, E, D, C, x[J + 1], 4, 2763975236);
    C = w(C, F, E, D, x[J + 4], 11, 1272893353);
    D = w(D, C, F, E, x[J + 7], 16, 4139469664);
    E = w(E, D, C, F, x[J + 10], 23, 3200236656);
    F = w(F, E, D, C, x[J + 13], 4, 681279174);
    C = w(C, F, E, D, x[J + 0], 11, 3936430074);
    D = w(D, C, F, E, x[J + 3], 16, 3572445317);
    E = w(E, D, C, F, x[J + 6], 23, 76029189);
    F = w(F, E, D, C, x[J + 9], 4, 3654602809);
    C = w(C, F, E, D, x[J + 12], 11, 3873151461);
    D = w(D, C, F, E, x[J + 15], 16, 530742520);
    E = w(E, D, C, F, x[J + 2], 23, 3299628645);
    F = v(F, E, D, C, x[J + 0], 6, 4096336452);
    C = v(C, F, E, D, x[J + 7], 10, 1126891415);
    D = v(D, C, F, E, x[J + 14], 15, 2878612391);
    E = v(E, D, C, F, x[J + 5], 21, 4237533241);
    F = v(F, E, D, C, x[J + 12], 6, 1700485571);
    C = v(C, F, E, D, x[J + 3], 10, 2399980690);
    D = v(D, C, F, E, x[J + 10], 15, 4293915773);
    E = v(E, D, C, F, x[J + 1], 21, 2240044497);
    F = v(F, E, D, C, x[J + 8], 6, 1873313359);
    C = v(C, F, E, D, x[J + 15], 10, 4264355552);
    D = v(D, C, F, E, x[J + 6], 15, 2734768916);
    E = v(E, D, C, F, x[J + 13], 21, 1309151649);
    F = v(F, E, D, C, x[J + 4], 6, 4149444226);
    C = v(C, F, E, D, x[J + 11], 10, 3174756917);
    D = v(D, C, F, E, x[J + 2], 15, 718787259);
    E = v(E, D, C, F, x[J + 9], 21, 3951481745);
    F = r(F, G);
    E = r(E, L);
    D = r(D, q);
    C = r(C, p)
  }
  return function(d) {
      var c = parseInt("0x" + d.substr(0, 3), 16),
        b = parseInt("0x" + d.substr(3, 3), 16),
        a = parseInt("0x" + d.substr(6, 3), 16);
      d = parseInt("0x" + d.substr(9, 3), 16);
      return K(c) + K(b) + K(a) + K(d);
      console.log(K(c) + K(b) + K(a) + K(d))
    }
    (H(F).substr(0, 4) + H(E).substr(0, 4) + H(D).substr(0, 4))
}
  //传过来的时候,chunk = “你好”
    req.on(‘data‘, function(chunk){    #添加post请求
        process.stdout.write(chunk+‘\n‘);
        // // process.stdout.write(hh + ‘\n‘);
        // var hhh = "你好"
        rrr = chunk.toString()
        process.stdout.write(typeof rrr  + ‘\n‘);

        process.stdout.write(rrr+‘\n‘);
        mm = dictCrypto(rrr);
        post +=mm;
    });

    req.on(‘end‘, function(){
        post = querystring.parse(post);
        res.end(util.inspect(post));
    });
}).listen(8888);

console.log(‘Server running at http://127.0.0.1:8888/‘);

第三步:正常的python代码,去访问本地的服务器,直接把转换完的数据存储到本地

#! /usr/bin/env python
#coding: utf-8
import re
import os
import requests
import sys
import json
reload(sys)
sys.setdefaultencoding(‘utf-8‘)
path = "D:\\106_data\\juhai_data\\"
ff = open(path + "answer_1.txt",‘a‘)
f = open("data_1.dict")   #这个是你的词典,按照行来访问词典
tt = {}
i = 1
j = 1

s = requests.session()
s.keep_alive = False

while 1:
    word = f.readline()
    if not word:
        ans = json.dumps(tt)
        ff.write(ans)
        break
    print word,
    if (i%100000 == 0):#一万个词存储一次,存的格式为字典
        j = j + 1
        ans = json.dumps(tt)
        ff.write(ans)
        ff.close()
        ff = open(path + "answer_" +str(j) + ".txt",‘a‘)
        tt = {}
    word = word.strip(‘\n‘)
    html = requests.post("http://127.0.0.1:8888/",data =word,headers={‘Connection‘:‘close‘})
    print html.text
    xx = re.search("{ (.*?): ‘‘ }",html.text,re.S)#用到了正则去提取内容
    try:
        xx = xx.group(1)
        xx = xx.strip("‘")
    except:
        continue
    tt[word] = xx
    print xx
    i = i+1
    s = requests.session()
    s.keep_alive = False
ff.close()
f.close()
时间: 2024-08-24 11:56:30

爬虫:爬取海词的翻译内容的相关文章

Python爬虫爬取糗事百科段子内容

参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import reimport threadimport timeimport sys #定义要抓取的网页#url = 'http://www.qiushibaike.com/hot/'#读取要抓取的网页#globalcontent = urllib.urlopen(url).read()#抓取段子内容#new_

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

Python项目之我的第一个爬虫----爬取豆瓣图书网,统计图书数量

今天,花了一个晚上的时间边学边做,搞出了我的第一个爬虫.学习Python有两个月了,期间断断续续,但是始终放弃,今天搞了一个小项目,有种丰收的喜悦.废话不说了,直接附上我的全部代码. 1 # -*- coding:utf-8 -*- 2 __author__ = 'Young' 3 4 import re,urllib #urllib : 网页访问,返回网页的数据.内容 5 def my_get(ID):# 封装成函数方便调用 6 html = urllib.urlopen("https://r

java爬虫爬取网页内容前,对网页内容的编码格式进行判断的方式

近日在做爬虫功能,爬取网页内容,然后对内容进行语义分析,最后对网页打标签,从而判断访问该网页的用户的属性. 在爬取内容时,遇到乱码问题.故需对网页内容编码格式做判断,方式大体分为三种:一.从header标签中获取Content-Type=#Charset:二.从meta标签中获取Content-Type=#Charset:三.根据页面内容分析编码格式. 其中一/二方式并不能准确指示该页面的具体编码方式,周全考虑,加入第三种方式. 第三种方式引入开源jar包info.monitorenter.cp

Python爬虫爬取百度贴吧的帖子

同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urllib2import reimport sys reload(sys)sys.setdefaultencoding("utf-8")#处理页面标签,去除图片.超链接.换行符等class Tool: #去除img标签,7位长空格 removeImg = re.compile('<img.*

如何防止网站被爬虫爬取的几种办法

如何防止网站被爬虫爬取的几种办法 小 中 大 chen 2013-10-08 23:26 Linux 547 次浏览 抢沙发 今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对web服务器有比较性能有影响,主要的表现就是会变得很慢. 对于如何防止网站被爬取,我想从以下几种方法去分析: 1.基于程序本身去防止爬取:作为爬虫程序,爬取行为是对页面的源文件爬取,如爬取静态页面的html代码,可以用jquery去模仿写h

Python编写网页爬虫爬取oj上的代码信息

OJ升级,代码可能会丢失. 所以要事先备份. 一开始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启发和聪神的原始代码, 网页爬虫走起! 已经有段时间没看Python, 这次网页爬虫的原始代码是 python2.7版本, 试了一下修改到3.0版本, 要做很多包的更替,感觉比较烦,所以索性就在这个2.7版本上完善了. 首先观赏一下原始代码,我给加了一些注释: # -*- coding: cp936 -*- import urllib2 import urllib import re import

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

如何使用robots禁止各大搜索引擎爬虫爬取网站

ps:由于公司网站配置的测试环境被百度爬虫抓取,干扰了线上正常环境的使用,刚好看到每次搜索淘宝时,都会有一句由于robots.txt文件存在限制指令无法提供内容描述,于是便去学习了一波 1.原来一般来说搜索引擎爬取网站时都会,先读取下robots.txt文件,并依照里面所设定的规则去爬取网站(当然是指没用登录限制的页面) 2.下面我们就来说一说如何设置robots.txt文件 1).robots.txt文件必须是放在文件根目录上: 例如: ├─admin │  └─templates │