Mr.Bighead 发表于 2020-3-14 21:35:00

请问“论一只爬虫的自我修养2:实战”中,爬取的数据为什么不是字典而是整个网页

代码如下
import urllib.request
import urllib.parse

url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data={}
data['i']= 'i love fishc.com'
data['from']= 'AUTO'
data['to']= 'AUTO'
data['smartresult']= 'dict'
data['client']= 'fanyideskweb'
data['salt']= '15841896797322'
data['sign']= 'a8b0706f8a366ad3b1b156e451b7fe76'
data['ts']= '1584189679732'
data['bv']= 'a9c3483a52d7863608142cc3f302a0ba'
data['doctype:']= 'json'
data['version']= '2.1'
data['keyfrom']= 'fanyi.web'
data['action']= 'FY_BY_CLICKBUTTION'
data=urllib.parse.urlencode(data).encode('utf-8')

response=urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')

print(html)


求各位解答

TJBEST 发表于 2020-3-14 22:09:17

本帖最后由 TJBEST 于 2020-3-14 22:13 编辑

爬取什么得看对方服务器给你什么啊?你查查 返回的的 response.headers() 里面的 content-type是什么 好好研究一下。
爬虫就是根据他返回的数据 进行筛选 然后进一步爬取数据 或者储存数据。他返回的是网页也是可以爬数据的,具体返回的是什么,得看服务器啊
返回的可能是网页 、也可能是json 更有可能是 多媒体。而且 网站都有反爬虫机制,你获取数据后,最好看看对不对。
如果返回的网页 是诸如“错”,“无法访问”之类的字,证明你没爬到

TJBEST 发表于 2020-3-14 22:28:16

我给你 来一个 我写的吧 你看看 和你的区别 你返回的不是Json应该是post数据有问题
import urllib.request
import urllib.parse
import json
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
proxy_url = ['183.146.213.157:80','101.231.104.82','39.137.69.10:80','101.95.115.196:80']#代理列表
index = 0
while True:
    inputStr = input('\n请输入你想要翻译的中文(输入q退出):\n')
    while True:
      try:
            if inputStr == 'q':
                break
            post = {'i':inputStr,'from': 'zh-CHS','to':' en','smartresult':' dict','client': 'fanyideskweb',
      'salt': '15766316706921','sign': '226a73a4714da07f6fad23fa645c2240','ts': '1576631670692',
      'bv': '5575008ba9785f184b106838a72d6536','doctype':'json','version': '2.1','keyfrom': 'fanyi.web',
      'action': 'FY_BY_REALTlME'}
            postRealData = urllib.parse.urlencode(post).encode('utf-8')

            #绑定代理
            proxy = urllib.request.ProxyHandler({'http':proxy_url})#绑定代理网址的程序 协议:网址端口 字典
            opener = urllib.request.build_opener(proxy)#理解为 代理服务可以运用
            urllib.request.install_opener(opener)#默认的全局代理服务(其实可以定义多个代理,这个是不设置默认的)
            
               
            req = urllib.request.Request(url,data = postRealData)

            #opener没有添加报头的函数
            req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36')#伪装浏览器访问
            response = urllib.request.urlopen(req)
            responseData = response.read().decode('utf-8')
            jsonData = json.loads(responseData)
            translateResult = jsonData['translateResult']['tgt']
            print('翻译的结果是' + translateResult)
            break
      except Exception:
            index =index + 1
            index = index % len(proxy_url)
    index =index + 1
    index = index % len(proxy_url)

TJBEST 发表于 2020-3-14 22:30:47

我找到了你的错误了
data['doctype']= 'json'
你多打了一个 : 给个采纳吧

Mr.Bighead 发表于 2020-3-14 23:10:43

TJBEST 发表于 2020-3-14 22:30
我找到了你的错误了
data['doctype']= 'json'
你多打了一个 : 给个采纳吧

感谢{:5_106:}

^0^ 发表于 2020-7-3 15:35:03

怎么感觉不对

^0^ 发表于 2020-7-3 15:35:35

import urllib.request
import urllib.parse


url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

data={}
data['i']=            '你好'
data['from']=         'AUTO'
data['to']=         'AUTO'
data['smartresult']='dict'
data['client']=       'fanyideskweb'
data['salt']=         '15830270361564'
data['sign']=         '722c486628af34b85df217c4fe6b111a'
data['ts']=         '1583027036156'
data['bv']=         '0ed2e07b89acaa1301d499442c9fdf79'
data['doctypt']=      'json'
data['version']=      '2.1'
data['keyfrom']=      'fanyi.web'
data['action']=       'FY_BY_REALTlME'



print(data)

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


response =urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')

print(html)


我这段代码 也是爬的网页。。

^0^ 发表于 2020-7-3 18:06:26

我错了,doctpye 打错了,所以 ,爬出全部网页的,可能是字典错误
页: [1]
查看完整版本: 请问“论一只爬虫的自我修养2:实战”中,爬取的数据为什么不是字典而是整个网页