栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python爬虫 使用urllib的post请求百度翻译的详细翻译

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python爬虫 使用urllib的post请求百度翻译的详细翻译

        本节课通过爬取百度翻译的详细翻译的数据为例对urllib中post进行讲解。
黄线处就是提供详细翻译的文件

        先根据上一节的方法来试着爬取数据:

import urllib.request
import urllib.parse

# url是上图黄线处文件的Request URL:
url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'

headers = {
    'User-Agent': '你的UA'
}

data = {
    'from': 'en',
    'to': 'zh',
    'query': 'spide',
    'transtype': 'realtime',
    'simple_means_flag': '3',
    'sign': '894007.608006',
    'token': '7eab9fb613c8ee66bd7d8a8e7fd3f838',
    'domain': 'common',
}

# post请求的参数必须要进行编码,并调用encode方法
data = urllib.parse.urlencode(data).encode('utf-8')

# 请求对象的定制
request = urllib.request.Request(url=url, data=data, headers=headers)

# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)

# 获取响应的数据
content = response.read().decode('utf-8')

import json

obj = json.loads(content)
print(obj)

        输出结果:

        可以发现,只能爬取部分数据,且会出现‘未知错误’ 。

        所以我们需要在请求数据的过程中进行进一步反爬。

        单单提供UA已经不足以成功请求数据,所以我们得多提供点信息:将Request Headers的所有数据都存放入headers字典中:

         可以利用EditPlus快速给数据添加单引号:

 ↓

 

        修改完headers里的数据后,点击运行会报错:

需要utf-8

         为了防止冲突,将headers里的‘Accept-Encoding’那行注释掉即可:

         再次点击运行:

        成功! 

        这时候可以思考下,那么一大串headers数据,究竟哪个才是起决定性作用的呢?

我们开始测试一下,将headers里的代码一行一行注释掉进行测试,看注释掉的那行影不影响运行结果:

         最终发现,其它代码全部注释掉,仅保留cookie,就能成功运行爬取数据。

所以,在爬取百度翻译详细数据的时候,cookie才是起决定性因素的条件。

                

        最终代码:

import urllib.request
import urllib.parse

url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'

headers = {
    'cookie': '你的cookie',  
}

data = {
    'from': 'en',
    'to': 'zh',
    'query': 'spide',
    'transtype': 'realtime',
    'simple_means_flag': '3',
    'sign': '894007.608006',
    'token': '7eab9fb613c8ee66bd7d8a8e7fd3f838',
    'domain': 'common',
}

# post请求的参数必须要进行编码,并调用encode方法
data = urllib.parse.urlencode(data).encode('utf-8')

# 请求对象的定制
request = urllib.request.Request(url=url, data=data, headers=headers)

# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)

# 获取响应的数据
content = response.read().decode('utf-8')

import json

obj = json.loads(content)
print(obj)

        

        所以,在爬取不同网站的过程中,不同网站所需headers条件可能不同,可能要UA,可能要cookie,也可能要Referer等。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/738085.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号