爬虫第一篇:爬虫详解之urllib.request模块

我将urllib.request 的GET请求和POST请求两种方法做了总结

GET请求

GET请求爬取:
import urllib.request
import urllib.parse

headers = {"User-Agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)"}

-------对字符串进行编码的第一种方法---------
baseurl = "http://www.baidu.com/s?wd="
key = input("请输入要搜索的内容:")
url = baseurl + urllib.parse.quote(key)

-------对字符串进行编码的第二种方法---------
baseurl = "http://www.baidu.com/s?"
key = input("请输入要搜索的内容:")
key = urllib.parse.urlencode({"wd":key})
url = baseurl + key

-------获取响应对象的第一种方法-------------
# 创建请求对象
req = urllib.request.Request(url,headers=headers)
# 获取响应对象
res = urllib.request.urlopen(req)

-------获取响应对象的第二种方法-------------
# 直接发请求,并得到响应对象
res = urllib.request.urlopen(url)

# 获取内容

  html = res.read().decode("utf-8") # 获取字符串
  # res.read() # 数据类型bytes
  # res.getcode() : 返回HTTP的响应码

POST请求

Post请求:
import urllib.request
import urllib.parse
import json

key = input("请输入要翻译的内容:")
data = {
        "i":key,
        "from":"AUTO",
        "to":"AUTO",
        "smartresult":"dict",
        "client":"fanyideskweb",
        "salt":"15458120942800",
        "sign":"108feafc7c01c7461a41034463a8df9b",
        "ts":"1545812094280",
        "bv":"363eb5a1de8cfbadd0cd78bd6bd43bee",
        "doctype":"json",
        "version":"2.1",
        "keyfrom":"fanyi.web",
        "action":"FY_BY_REALTIME",
        "typoResult":"false"
    }
# 把data转为bytes数据类型
data = urllib.parse.urlencode(data).encode("utf-8")
# 发请求,获响应,获取内容
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
headers = {"User-Agent":"Mozilla/5.0"}
req = urllib.request.Request
            (url,data=data,headers=headers)
res = urllib.request.urlopen(req)
html = res.read().decode("utf-8")

# 把json格式的字符串转为python中字典
rDict = json.loads(html)
result = rDict["translateResult"][0][0]["tgt"]
print(result)

总结

从上面我们可以看出,GET请求和POST请求的区别主要是数据的组织形式不同。

GET请求数据是通过url直接传过去, POST请求数据是通过body传过去的

我上面的data数据是直接去网站 F12 拦截请求拿到的

原文地址:https://www.cnblogs.com/leijing0607/p/7687984.html