• 爬虫一


    1、爬虫前奏
    ①URL详解
    scheme:代表是访问的协议,一般为http或者是https以及ftp等:
    host:主机名
    port:端口号
    path:查找路径
    query-string:查询字符串,
    anchor:锚点,后台一般不管,前端用来做页面定位的。

    ②http协议
    常用的方法有get请求与post请求。
    get请求:一般情况下,只从服务器获取数据下来,并不会对服务器资源产生任何影响。
    post请求:向服务器发送数据,上传文件等,会对服务器产生影响

    ③请求头常见参数
    User-Agent:浏览器名称。
    Referer:表面当前这个请求是从哪个URL过来的。
    Cookie:http协议是无状态的。

    ④常见响应状态码
    200:请求正常,服务器正常返回数据
    301:永久重定向。
    302:临时重定向。
    400:请求的URL在服务器上找不到。
    403:服务器拒绝访问,权限不够。
    500:服务器内部错误。可能服务器出现bug了。

    2、网络请求
    ①urllib库
    在Python3中,所有与网络请求相关的方法都被集成到了urllib.request模块下面了。

    ②urlopen函数:
    from urllib import request
    resp = request.urlopen('http://www.baidu.com')#用.urlopen函数访问网页
    print(resp.read())#用.read(size)方法将网页的所有内容读取出来
    url:请求的url
    data:请求的data,如果设置了这个值,那么将变成post请求。
    返回值:read(size)默认读取所有信息,readline()默认读取一行信息,readlines()读取多行信息,gercode()是获取当前网页的状态码

    ③urlretrieve函数:
    这个函数可以将网页上的一个文件保存到本地。
    from urllib import request
    resp = request.urlretrieve('http://www.baidu,.com/','baidu.html')#urlretrieve('网站地址','保存的名字')可以非常方便的获取图片或网页页面。

    ④urlencode函数和parse_qs函数:
    这两个模块实在urllib.parse模块下的。
    #urlencode()用于将中文和特殊符号进行编码。
    from urllib import parse
    params = {'name':'小白','age':'18','greet':'hello'}
    result = parse.urlencode(params)
    print(result)
    结果:name=%E5%B0%8F%E7%99%BD&age=18&greet=hello

    #parse_qs()用于将解码。
    from urllib import parse
    params = {'name':'小白','age':'18','greet':'hello'}
    qs = parse.urlencode(params)
    result = parse.parse_qs(qs)
    print(result)
    结果:{'name': ['小白'], 'age': ['18'], 'greet': ['hello']}

    ⑤urlparse函数和urlsplit函数:
    用于将解析网址的函数,也是在urllib.parse模块下的。
    from urllib import parse
    #urlparse函数和urlsplit函数
    url ='https://www.baidu.com/s?wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B&rsv_spt=1&rsv_iqid=0x8644922000021612&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=06074089_36_pg&rsv_enter=1&rsv_dl=ib&rsv_sug3=5&rsv_sug1=1&rsv_sug7=100'
    # result = parse.urlparse(url)
    result = parse.urlsplit(url)#区别在于urlsplit函数没有params
    print(result)
    print('scheme:',result.scheme)
    print('netloc:',result.netloc)
    print('path:',result.path)
    # print('params:',result.params)
    print('query:',result.query)
    print('fragment:',result.fragment)

    ⑥request.Request类
    例如:
    from urllib import request,parse

    url = 'https://www.cnblogs.com/wu-wu/category/1488072.html'#网页地址

    headers ={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    }#网页的请求头

    req = request.Request(url,headers = headers)#导入网页地址和请求头,以浏览器身份请求网页
    resp = request.urlopen(req)#打开网页地址
    print(resp.read().decode('utf-8'))#将请求的内容解码回来并打印出来

    ⑦ProxyHandler处理器(代理设置)
    from urllib import request

    url = 'http://httpbin.org/ip'#查看自己IP的网站
    handler = request.ProxyHandler({"https":"117.57.90.25:9999"})#设置代理网站
    opener = request.build_opener(handler)#打开代理网站
    # req = request.Request("http://httpbin.org/ip")
    resq = opener.open(url)
    print(resq.read())

    ⑧cookie原理及格式详情
    cookie是可以用于存储登录信息,cookie能存储信息比较小。
    #cookie的格式:Set-Cooker: NAME=VALUE: Expires/Max-age=DATH: Domain=DOMAIN_MAME:SECURE
    #NAME:cookie的名字。
    #VALUE:cookie的值。
    #Expires:cookie的过期时间。
    #Path:cookie作用的路径。
    #Domain:cookie作用的域名。
    #SECURE:是否只在https协议下起作用。

    ⑨cookie 模拟登录
    from urllib import request

    url = 'https://www.cnblogs.com/'

    headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
    "cookie":"_ga=GA1.2.1000081871.1564917076; __gads=ID=bb1d9716962a6860:T=1564975837:S=ALNI_MbVG3G2dcIKXSXxurKKe5iO6IWHWA; .Cnblogs.AspNetCore.Cookies=CfDJ8DeHXSeUWr9KtnvAGu7_dX-AytKAwHwN4y3UUIBU1EbRva5IDlRvpDrHugXNjaVki8tfaRWspxWeHF63Pt55AES0yBNEXKbmnXR8mY_FZO4MHTK5InVChdxgA2j7e4t-O7wfLoHpfTFuXhVSdh1ui2sNU_04KWrxA5bEqNM22AnBLf20ST9eTo4KRPLE7YwW8V2g1d_ATSJDNYmfjiIj943KAyYAOyfW-YGlkyI9TrXTk6WYrxB9HHVaBFD6tC3RTlhNP_tEZqtHiYOxcgO628qCG5gR7im15EpZy-TKP4EhgEqGQBjIiMqOV4KV6vATpUN7OvoOkl-SGTUiCMBBT3WyH4s6NBQN8q116QQ1IH0DMhMdl98G8UzcwLtGibtdhgmg8wvJ878yG2wfHORQAA58yajD8wA5NjjZBfwyyROnAJI5l4ep911YNyUW0MTYC615_5qKJ-ADq6510cfxTpo; .CNBlogsCookie=191DA8F2560020F7B2FFE700ADE7182A6C3FFFD67AD8271E0930A5EFBBEF16CE45618DF55908A3BC13106870EDC576487E8204716B56647199A2E5385246C81D3275319AB63957E5DF1FA243276F458BFE2E8ECB; _gid=GA1.2.1150744539.1571561207"
    }#cookie模仿浏览器存储账号和密码的

    req = request.Request(url=url,headers=headers)#传入网页地址和头文件内容
    resp =request.urlopen(req)#用于打开网页
    with open('bokeyuan.html','w',encoding='utf-8') as fp:#用文件存储的方式将获得的内容写入文件中
    #write函数必须写入一个str的数据类型,但的到的网页一般是bytes(二进制)的数据类型,所以需要用decode解码
    fp.write(resp.read().decode('utf-8'))

    ⑩http.cookiejar模块
    #Cookicjar:管理HTTP cookie的值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象
    #FileCookiejar:从Cookicjar派生而来,用来创建FileCookiejar实例,检索cookie信息并将cookie存储到文件中
    #MozillaCookiejar:创建Mozilla浏览器 cookie.txt兼容的FileCookiejar实例
    #LWPCCookiejar:创建libwww.perl标准的Set-Cookie3文件的格式兼容的FileCookiejar
    from urllib import request,parse
    from http.cookiejar import CookieJar

    headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
    }
    def get_opener():
    cookiejar = CookieJar()#创建一个cookiejar对象
    handler =request.HTTPCookieProcessor(cookiejar)#使用cookiejar创建一个HTTPCookieProcessor对象
    opener = request.build_opener(handler)#使用上一步创建的hanler创建opener
    return opener

    def login_boke(opener):
    data ={
    "Loginname":"用户名",
    "Password":"密码"
    }
    login_url ="https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F"
    req = request.Request(login_url,data=parse.urlencode(data).encode('utf-8'),headers=headers)
    opener.open(req)#使用opener发送登录的请求(登录界面的登录账号和登录密码)

    def visit_profile(opener):
    zhu_url = "https://www.cnblogs.com/"#访问主页面
    req =request.Request(zhu_url,headers=headers)
    resp = opener.open(req)
    with open('boke.html','w',encoding='utf-8') as fp:
    fp.write(resp.read().decode('utf-8'))

    if __name__ =='__main__':
    opener= get_opener()
    login_boke(opener)
    visit_profile(opener)

  • 相关阅读:
    他山之石____集合框架__【List,Set,Map之间的区别】
    集合框架__【泛型】
    集合框架__【Set集合】【HashSet】【TreeSet】
    模式串匹配,KMP算法——HDU1686
    模式串匹配,KMP算法——HDU1711
    网络最大流——POJ
    网络最大流——HDU
    拓扑排序——CodeForces-645D
    二分图染色,二分图匹配——HDU
    二分图匹配,最小点覆盖——POJ
  • 原文地址:https://www.cnblogs.com/dcpb/p/11715881.html
Copyright © 2020-2023  润新知