Python学习

作者: 逛逛_堆栈 | 来源:发表于2021-04-19 10:02 被阅读0次

    第二十六天

    爬虫学习(一)

    1、认识网页

    网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JavaScript(活动脚本语言)。
    1、HTML
    HTML 是整个网页的结构,相当于整个网站的框架。带“<”、“>”符号的都是属于 HTML 的标签,并且绝大多数的标签都是成对出现的。

    <html>..</html> 表示根标记其实可以说内部元素就是网页内容
    <body>..</body> 表示用户页面可见的内容
    <div>..</div> 表示框架
    <p>..</p> 表示段落
    <img>..</img>表示图片
    <h1>..</h1>表示标题
    <a href="">..</a>表示超链接
    

    2、CSS
    CSS 表示样式,在 CSS 中定义了外观,我们可以说在HTML中定义了页面的内容,而CSS就是给我们页面的内容化妆美化的,让页面显得好看。
    3、JavaScript
    JavaScript表示功能。交互的内容和各种特效都在 JavaScript中,JavaScript描述了网站中的各种功能。
    4、一个简单的网页

    <html>
    <head>
        <title> 网页标题</title>
    </head>
    <body>
        <div>
            <p>段落标签</p>
        </div>
        <div>
            <ul>
                <li><a href="http:/www.baidu.com">百度</a></li>
            </ul>
        </div>
    </body>
    

    2、认识爬虫

    简单来说,爬虫就是一段自动抓取互联网信息的程序。互联网其实由一个个的url相互关联起来的,而我们的爬虫就是从url出发,爬取我们需要的价值数据。


    互联网.png

    简单来说,爬虫就是爬取互联网数据,为我所用。

    3、爬虫常见概念

    3.1、url管理器

    url管理器就是用来管理抓取URL集合和已经抓取的URL集合的,用来防止重复抓取数据,进而形成死循环。
    URL管理器功能:

    URL管理器
    URL管理器实现方式
    1、使用内存,分别对待爬取URL集合以及已爬取URL集合创建set();
    2、使用关系数据库MySQL,创建表urls(url,is_status),前者代表链接,后者代表是否已经爬取的状态;
    3、使用缓存数据库,比如说Redis,同样对待爬取URL集合以及已爬取URL集合创建set,因为Redis中支持set数据;

    3.2、网页下载器

    网页下载器:
    将互联网上URL对应的网页以HTML的形式下载到本地文件或者内存字符串的工具。

    网页下载器
    Python中两种网页下载器:
    1、urllib2、Python官方的基础模块;
    2、requests、第三方很强的包;
    我们先来简单说说urllib2。
    urllib2下载网页的方式

    1、urllib2.urlopen(url)方法
    python3中已经将urllib2改为urllib.request。

    import  urllib.request as urllib2
    
    #直接请求
    response = urllib2.urlopen('http://www.baidu.com')
    #获得状态码 200即为成功
    status = response.getcode()
    print(status)
    #读取响应内容
    content = response.read()
    print(content)
    

    2、urllib2.Request对象设置
    如果需要执行更复杂的操作,比如增加HTTP报头,必须创建一个 Request 实例来作为urlopen()的参数;而需要访问的url地址则作为 Request 实例的参数。
    而这个Request实例除了URL参数之外,还可以设置data和headers参数:
    data参数、随着URL提交的数据,默认是空值。
    headers参数、字典,主要是需要发送的HTTP报头的键值对数据,比如不同的浏览器在发送请求的时候,会有不同的User-Agent,我们就可以假冒身份。

    import  urllib.request as urllib2
    
    url = 'http://www.baidu.com'
    data = {}
    headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
    request = urllib2.Request(url=url,data=data,headers=headers)
    #向服务端发送请求
    response = urllib2.urlopen(request)
    #获得响应数据
    html = response.read()
    print(html)
    

    3、添加特殊场景处理器
    我们在访问网页的时候,肯定会存在部分页面只有登陆情况下才可以访问、需要代理才可以访问、甚至有些网页需要HTTPS加密访问,这个时候我们就需要场景处理器了。
    常见的处理器如下:
    HTTPCookieProcessor、从文件中获取cookies,做为请求的一部分去访问;
    ProxyHandler、部分网站会检测某一段时间某个IP的访问次数,如果访问次数多的不像正常人,它会禁止这个IP的访问。所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取;
    HTTPSHandler、发送https的请求;
    HTTPRedirectHandler、拦截重定并发起重新发起请求;

    场景处理器
    import urllib.request as urllib2
    import random
    
    url ="http://www.baidu.com/"
    header={
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
    }
    proxy_list = [
        {"http" :  "IP地址1 : 端口1"},
        {"http" :  "IP地址2 : 端口2"},
        {"http" :  "IP地址3 : 端口3"},
    ]
    # 随机选择一个代理
    proxy = random.choice(proxy_list)
    # 使用选择的代理构建代理处理器对象
    httpproxy_handler = urllib2.ProxyHandler(proxy)
    opener = urllib2.build_opener(httpproxy_handler)
    request = urllib2.Request(url,headers=header)
    response = opener.open(request)
    print(response.read().decode('utf-8'))
    

    3.3、网页解析器

    网页解析器、其实就是从网页中获取有价值数据的工具。
    python中常见的网页解析器:
    1、正则表达式
    2、python自带的html.parser
    3、BeautifulSoup第三方模块
    4、lxml模块
    这四种方式中,正则表达式其实就是字符串的模糊匹配,后三者均是结构化的解析。
    网页解析器如何解析,后面具体去代码实现。。。

    相关文章

      网友评论

        本文标题:Python学习

        本文链接:https://www.haomeiwen.com/subject/xkfvlltx.html