zoukankan      html  css  js  c++  java
  • 理解爬虫原理

    这次作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2881

    1. 简单说明爬虫原理

           如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物。爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。

    2. 理解爬虫开发过程

    1).简要说明浏览器工作原理;

    浏览器工作原理的实质就是实现http协议的通讯,具体过程如下: HTTP通信的流程,大体分为三个阶段: 

    (1) 连接 服务器通过一个ServerSocket类对象对8000端口进行监听,监听到之后建立连接,打开一个socket虚拟文件。
    (2)请求 创建与建立socket连接相关的流对象后,浏览器获取请求,为GET请求,则从请求信息中获取所访问的HTML文件名,向服务器发送请求。
    (3)应答 服务收到请求后,搜索相关目录文件,若不存在,返回错误信息。若存在,则想html文件,进行加HTTP头等处理后响应给浏览器,浏览器解析html文件,若其中还包含图片,视频等请求,则浏览器再次访问web服务器,异常获取图片视频等,并对其进行组装显示出来。

    2).使用 requests 库抓取网站数据;

    requests.get(url) 获取校园新闻首页html代码

    运行代码:

    import requests
    url="http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0328/11086.html"
    res=requests.get(url)
    res.encoding='utf-8'
    print(res.text)

    运行截图:

    3).了解网页

    写一个简单的html文件,包含多个标签,类,id

    运行代码:

    html = ' 
    <html> 
        <body> 
              <h1 id="title">Hello</h1> 
              <a href="#" class="link"> This is link1</a>
              <a href="# link2" class="link" qao=123> This is link2</a>
        </body> 
    </html> '

    4).使用 Beautiful Soup 解析网页;

    通过BeautifulSoup(html_sample,'html.parser')把上述html文件解析成DOM Tree

    select(选择器)定位数据

    找出含有特定标签的html元素

    找出含有特定类名的html元素

    找出含有特定id名的html元素

    运行代码:

    from bs4 import BeautifulSoup
    html = ' 
    <html> 
        <body> 
              <h1 id="title">Hello</h1> 
              <a href="#" class="link"> This is link1</a>
              <a href="# link2" class="link" id="link2"> This is link2</a>
        </body> 
    </html> '
    soups=BeautifulSoup(html,'html.parser')
    a=soups.a
    h=soups.select('h1')
    l=soups.select('.link')
    i=soups.select('#link2')
    print(soups)
    print(i)

    运行截图:

    3.提取一篇校园新闻的标题、发布时间、发布单位、作者、点击次数、内容等信息

    本次爬虫的网站为:http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0328/11086.html,发布时间为datetime类型,点击次数为数值型,其它是字符串类型。

    1)新闻标题

    运行代码:

    import requests
    url="http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0328/11086.html"
    res=requests.get(url)
    res.encoding='utf-8'
    import bs4
    from bs4 import BeautifulSoup
    soup1=BeautifulSoup(res.text,'html.parser')
    title=soup1.select('.show-title')[0].text
    print(title)

    2)新闻发布时间

    运行代码:

    from datetime import datetime
    time=soup1.select('.show-info')[0].text.split()[0].split(':')[1]
    time1=soup1.select('.show-info')[0].text.split()[1]
    newtime=time+' '+time1
    newtime=datetime.strptime(newtime,"%Y-%m-%d %H:%M:%S")
    print("发布时间:"+str(newtime))

    (3)新闻作者

    运行代码:

    author=soup1.select('.show-info')[0].text.split()[2]
    print(author)

    4)新闻审核者

    运行代码:

    checker=soup1.select('.show-info')[0].text.split()[3]
    print(checker)

    (5)新闻来源

    运行代码:

    come=soup1.select('.show-info')[0].text.split()[4]
    print(come)

    (6)新闻摄影

    运行代码:

    photo=soup1.select('.show-info')[0].text.split()[5]
    print(photo)

    (7)新闻点击数

    运行代码:

    clickUrl="http://oa.gzcc.cn/api.php?op=count&id=11086&modelid=80"
    clickNum=requests.get(clickUrl).text.split('.html')[-1][2:-3]
    print("点击次数:"+clickNum)

    (8)新闻正文

    运行代码:

    content=soup1.select('.show-content')[0].text.split()[0:4]
    print(content)

    4.爬虫整体运行截图

  • 相关阅读:
    HTML DOM教程 14HTML DOM Document 对象
    HTML DOM教程 19HTML DOM Button 对象
    HTML DOM教程 22HTML DOM Form 对象
    HTML DOM教程 16HTML DOM Area 对象
    ubuntu 11.04 问题 小结
    VC6.0的 错误解决办法 小结
    boot.img的解包与打包
    shell里 截取字符串
    从零 使用vc
    Imagemagick 对图片 大小 和 格式的 调整
  • 原文地址:https://www.cnblogs.com/zyx1998/p/10623642.html
Copyright © 2011-2022 走看看