get 模式下

1、用urllib模块

form urllib import request,parse

URL=“http;//www.baidu.com/s?”

wd= input("input your keyword")

qs={“wd”:wd}  

qs = parse.urllencode(qs)              # 第一、給输入的lkeyword从中文编码成能识别的str模式

rsp = urllib.request.urlopen(URL)   #第二、打开网页

html = rsp.read()         #第三,读取html 数据

new_html = html.decode()         #第四,解码读取的数据,括号里面选填解码类型,如utf-8

 

print(new_html)           #最后打印html{

 

【注意】前提步骤,有url,用户输入的keyword并且以dict模式贮存,再对keyword进行编码。

    开始步骤 :打开网页(urlopen(url)),

         读取数据(read())

          数据解码(decode())

        打印数据

 

2、用request库

 import request

URL=“http;//www.baidu.com/s?”

wd= input("input your keyword")

qs={“wd”:wd}  

headers={"xxx":"xxxx"}

rsp = request.get(url,params=qs,headers = headers)  

html = rep.text

print(html)

【注意】,对比urllib库,减少了很多麻烦,不用编码,再打开,再解码的步骤

 

post模式下

用到urllib模块,josn

form urllib import request,parse

import json

 

url=“http://fanyi.baidu.com/sug”

wd= input("input your keyword")

qs={“wd”:wd} 

qs = parse.urllencode(qs).encode(utf-8)    #以utf-8的模式进行编码,结果是srt变成bytes类型

rsp = reques.urlopen(url,data=qs)    #打开网站,data是刚刚输入转换的编码数据

json_data =rsp.read.().dacode("utf-8")  #读取数据和解码数据

 

json_data = json.loads(json_data)    #,把json字符串转换成字典,数据是json格式的str模式,读取不了,将str变成dict格式就可以读取

for i,b in json_data["data"]      #遍历输出字典内容

  print(i,b)

2、用request库

import json

import request

url=“http://fanyi.baidu.com/sug”

wd= input("input your keyword")

qs={“wd”:wd} 

rsp = request.post(url,data= qs,headers=headers)

print(rsp.json())

【request 比较简单,不用对wd的值进行bytes转码,最后输出是要将结果进行json解析】  

 【注意】

get、post差别在于,get只要在url后面加入转码后的内容既可以跳转到需要的页面

         post,不存在get直接在url后面加入内容,而是加入一个data = keyword的 转码后数据跳转页面,并且通过utf-8解码后内容是json的字符串格式,要变成dict模式才能得到数据。

 

 

post2。

  urlopen提供能力不足

  模拟http信息,模范浏览器能力不足

为了更多的设置请求信息,单纯通过urlopen不好用

-利用request.Request类

orm urllib import request,parse

import json

 

url=“http://fanyi.baidu.com/sug”

wd= input("input your keyword")

qs={“wd”:wd} 

qs = parse.urllencode(qs).encode(utf-8)

headers = {“Content,Length”:len(qs)}

rq = request.Request(url=url,data=qs,headers=headers)    #构造一个个Request的类,参数url,data,headers,

rsp = reques.urlopen(rq)   

json_data =rsp.read.().dacode("utf-8")  

 

json_data = json.loads(json_data)    

for i,b in json_data["data"]      

 

 

ERROR

 

URLError

    -没网络

    -服务器链接失败

    是OSError的子类

import urllib import erquese ,error

  url="http://www.baiiiiiidu.com"

  try:

    req =request.Request(url)

    rsp =  request.urlopen(req)

    html = rsp.read().decode()

  except error.URLError as e :

    print(e)

  except Exception as e :

    print(e)

 

HTTPError,

是URLError的子类

  url="http://www.vnetbfmnqmvu.com"

  try:

    req =request.Request(url)

    rsp =  request.urlopen(req)

    html = rsp.read().decode()

  except error HTTPError as e :

    print(e)

  except error.URLError as e :

    print(e)

  except Exception as e :

    print(e)

【两者区别】HTTPError、:返回错误码400以上,引发httperror

      URLError:一般网络出问题

    关系父-子:oserror、urlerror、httperror  

 

UserAgent:身份隐藏,简称UA,属于headers的 一部分,服务器通过UA识别是否爬虫

    常见的UA值

      F12.NETWORD.查看UA

  url=“http:www.baidu.com”

form urllib import request ,error

  try:

    headers={}

    headers["User-Agent"]=UAxxxxxxxxx        # User-Agen不能拼错

    req = request.Request(url,headers = headers)

    html = req.read().decode()

    pinnt(html)

posted on 2019-08-21 21:57  我只是一只猫~  阅读(138)  评论(0编辑  收藏  举报