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)