把get和post方式爬取网页进行函数封装

from urllib import request,parse
from urllib.error import HTTPError,URLError
import json

#get方式
def get(url,headers=None):

    return urlrequest(url,headers=headers)

#post方式
def post(url,form,headers=None):
    return urlrequest(url,form,headers=headers)


def urlrequest(url,form=None,headers=None):
    #定义user-agent
    user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    #判断headers
    if headers == None:
        headers = {
            'User-Agent': user_agent
        }
    html_bytes = b''

    try:
        #判断是否传入form  如果传入form则是post方式,否则是get方式
        if form:
            #把form字典类型转换为字符串类型
            form_str = parse.urlencode(form)
            #把字符串类型转换为二进制类型
            form_bytes = form_str.encode('utf-8')
            #定义Request
            req = request.Request(url,data=form_bytes,headers=headers)
        else:
            req = request.Request(url,headers=headers)
        response = request.urlopen(req)
        html_bytes = response.read()

    except HTTPError as e:
        print(e)
    except URLError as e:
        print(e)

    return html_bytes

if __name__ == '__main__':
    #post方式
    url = 'http://fanyi.baidu.com/sug'
    kw = input('请输入你要翻译的文字:')
    form = {
        'kw':kw
    }
    html_bytes = post(url,form=form)
    #解析json
    res = json.loads(html_bytes.decode('utf-8'))
    result = res['data'][0]['k']
    result1 = res['data'][0]['v']
    print('原文:{}\n翻译:{}'.format(result,result1))
    #get方式
    url_get = 'http://www.baidu.com'
    html_byte = get(url_get)
    print(html_byte)

猜你喜欢

转载自blog.csdn.net/weixin_38920937/article/details/81637759