zoukankan      html  css  js  c++  java
  • 网络爬虫相关知识点

    • 这篇文章是本人这两天学习了一些爬虫知识后整理出来的,还在不断地完善,有什么不懂的地方也可提出来!
    pwd    #获取当前所在路径
    
    'C:\\Users\\ZL'
    
    cd D:\\python文件   ##更改当前路径为指定的路径D:\python文件
    
    D:\python文件
    
    pwd   #查看更改后的当前路径
    
    'D:\\python文件'
    
    #获取百度首页内容
    import urllib.request
    url = 'http://www.baidu.com'
    file = urllib.request.urlopen(url).read()  #打开该网站,并读取网站内容存储在变量‘file’中
    print(file)    #打印出获取的网站的内容  
    
    ##将该网址内容给存于本地文件
    fhandle = open("D:/python文件/1.html",'wb')  #以写入的方式打开一个本地文件,命名为*.html等网页格式
    fhandle.write(file)   #将爬取网页的内容赋值给了上述中的变量‘file’,在这里将变量的值写入到该文件中(可以看到写入的字节数是112159)
    fhandle.close  #关闭文件
    ##这样我们就将刚刚成功获取到的百度首页的内容保存到了本地(D:\python文件)文件夹下,可在该文件夹下查看
    
    112159
    
    ##也可以通过urllib.request.urlretrieve()将获取的内容保存到本地文件中
    filename = urllib.request.urlretrieve('http://edu.51cto.com',filename = "D:/python文件/2.html")
    

    urlretrieve执行的过程中,可能会产生一些缓存,若想清理这些缓存信息,可使用urlcleanup()进行清除,如以下的代码就可以清除:

    urllib.request.urlcleanup()
    

    此外,若我们希望获取当前爬取网页的状态码,可使用getcode()返回,比如可执行:

    urllib.request.urlopen(url).getcode()
    
    200
    

    若获取当前爬取的网址,可使用geturl()

    urllib.request.urlopen(url).geturl()
    
    'http://www.baidu.com'
    

    若在URL中使用一些不合标准的字符就会出现问题,此时需要进行编码,可以使用urllib.request.quote()进行,如对网址“https://www.sina.com.cn” 进行编码,可使用以下代码进行

    urllib.request.quote('https://www.sina.com.cn')
    
    'https%3A//www.sina.com.cn'
    

    对编码的网址进行解码,可使用以下代码

    urllib.request.unquote("https%3A//www.sina.com.cn")
    
    'https://www.sina.com.cn'
    

    模拟浏览器

    对于无法爬取的网页,可使用下面的代码(先任意打开一个网页,进入首页后按F12,随便百度一个链接

    ###两种方法,其区别之处就在于尾端的s和有没有下划线
    import urllib.request
    url = ("输入要爬取的网址")#定义了要爬取的网址赋给变量url
    headers = ("User-Agent","从浏览器中获取的具体信息")#格式为(“User-Agent”,具体信息)
    opener = urllib.request.build_opener()#修改报头
    opener.addheaders = [headers]
    data = opener.open(url).read
    或
    import urllib.request
    url = ("输入要爬取的网址")
    req = urllib.Request(url)#创建一个Request对象赋给req
    req.add_header('User-Agent','从浏览器中获取的具体信息')
    data = urllib.request.urlopen(req).read()#打开了对应的网址,并且读取了网页内容,赋给了变量data
    
    ##网页超时的时候,无法打开网页,我们即可根据自己的需要而安排超时的时间值
    import urllib.request
    for i in range(1,100):
        try:
            file = urllib.request.urlopen("此处是需要爬取的网址",timeout=1)##超时设置为1秒钟,也就是说1秒钟未响应的话就判定为超时,并读取该网站的内容,输出获取到的内容的长度
            data = file.read()
            print(len(data))
        except Exception as e:
            print("出现异常-->"+str(e))##如果超时,则会引发异常,输出“出现异常”等字样,并输出对应的异常原因
    ##如果要在爬取的时候设置超时异常的值,可以在urlopen()打开网址的时候通过timeout字段设置,格式为urllib.request.urlopen(要打开的网址,timeout=时间值)
            
    
    import urllib.request
    for i in range(1,10):
        try:
            file = urllib.request.urlopen("http://yum.iqianyue.com",timeout=20)#响应时间为20,即在20秒之内向该网站发送了大量的请求,继而在短时间内无法响应
            data = file.read()
            print(len(data))
        except Exception as e:
            print("出现异常-->"+str(e))
    
    14165
    14165
    14165
    14165
    14165
    14165
    14165
    14165
    14165
    

    HTTP协议请求(进行客户端与服务器之间的消息传递)

    • GET请求:GET请求会通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递。若使用表单进行传递,表单中的信息会自动转为URL地址中的数据,通过URL传递数据
    • POST请求:可以向服务器提交数据,是一种比,较主流也比较安全的数据传递方式
    • PUT请求:请求服务器存储一个资源,通常要指定要存储的位置
    • DELETE请求:请求服务器删除一个资源
    • HEAD请求:请求获取对应的HTTP报头信息
    • OPTIONS请求:可以获得当前URL所支持的请求类型

    代理服务器的设置

    即在同一个IP去爬取同一个网站上的网页,有时候就可能被屏蔽,则使用代理服务器,继而显示的不是我们的IP 地址,而是代理服务器的IP地址
    当然可以从整理好的网址http://yum.iqianyue.com/proxy中找到许多代理服务器地址

    def use_proxy(proxy_addr,url):   #自定义函数,实现使用代理服务器爬取网页的功能(第一个形参为代理服务器的地址,第二个为爬取网页的地址)
        import urllib.request
        proxy = urllib.request.ProxyHandler({"http":proxy_addr})#设置代理服务器信息
        opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)#创建对象opener,第一个为代理信息,第二个为类
        urllib.request.install_opener(opener)#创建全局默认的opener对象
        data = urllib.request.urlopen(url).read().decode('utf-8')#将获取的网址内容进行编码
        return data
    proxy_addr="42.4.215.69:80"
    data = use_proxy(proxy_addr,"http://www.baidu.com")
    print(len(data))
    #若某个IP地址打不开的话,估计就是失效了,多找几个IP地址试试
    
    8993
    

    有的时候,我们希望程序在运行的过程中,边运行边打印调试日志,此时需要打开DebugLog,思路如下:

    • (1)分别使用urllib.request.HTTPHandler()和urllib.request.HTTPSHandler()将debuglevel设置1
    • (2)使用urllib.request.build_opener()创建自定义的opener对象,并使用上式中设置的值为参数
    • (3)用urllib.request.install_opener()创建全局默认的opener对象,这样,在使用urlopen()时,也会使用安装的opener()对象
    import urllib.request
    httphd = urllib.request.HTTPHandler(debuglevel=1)
    httpshd = urllib.request.HTTPSHandler(debuglevel=1)
    opener = urllib.request.build_opener(httphd,httpshd)#创建自定义对象
    urllib.request.install_opener(opener)#创建全局默认的opener对象
    data = urllib.request.urlopen("http://edu.51cto.com")
    
    send: b'GET / HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: edu.51cto.com\r\nConnection: close\r\nUser-Agent: Python-urllib/3.5\r\n\r\n'
    reply: 'HTTP/1.1 200 OK\r\n'
    header: Date header: Content-Type header: Transfer-Encoding header: Connection header: Set-Cookie header: Server header: Vary header: Vary header: Vary header: Set-Cookie header: Expires header: Cache-Control header: Pragma header: Set-Cookie header: Set-Cookie header: Set-Cookie header: Load-Balancing header: Load-Balancing 
    

    爬虫中,处理异常

    用URL异常处理器——URLErro类进行相应的处理,需要导入urllib.error模块(HTTPErro是URLErro的子类)

    • 进行异常处理,我们经常使用try...except语句,try中执行主要代码,在except中捕获异常信息,并进行相应的异常处理
    • 一般来说,产生URLErro的原因有如下可能:1,连接不上服务器;2远程URL不存在;3无网络;4触发了HTTPErro
    import urllib.request
    import urllib.error
    try:
        urllib.request.urlopen("http://blog.csdn.net")#对该网页进行爬取
    except urllib.error.HTTPError as e:##先用子类处理异常
        print(e.code)
        print(e.reason)
    except urllib.error.URLError as e:#用父类处理异常
        print(e.reason)
    ## 先用子类处理异常,处理不了的话再用父类处理异常
    
    send: b'GET / HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: blog.csdn.net\r\nConnection: close\r\nUser-Agent: Python-urllib/3.5\r\n\r\n'
    reply: 'HTTP/1.1 200 OK\r\n'
    header: Server header: Date header: Content-Type header: Content-Length header: Connection header: Vary header: Cache-Control
  • 相关阅读:
    AWVS使用基础教程 什么是AWVS Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具
    91家纺网,三次更新,配套数据库models
    91家纺网,三次更新,此次代码不可联通
    91家纺网,二次更新
    91家纺
    Copy_Excel_To_Excel#--此脚本用于将目标表格写入新的表格--
    Find_Excel_From_Dir获取特定目录下的excel表格,将数据复制出来
    递归解压压缩包_模块更新(需要下载对应的解压程序)
    更新的Main函数
    添加copy模块_复制Excel文件
  • 原文地址:https://www.cnblogs.com/LouieZhang/p/7397710.html
Copyright © 2011-2022 走看看