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

    作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2851

    1. 简单说明爬虫原理

    • 向服务器发起请求
      通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器的响应。
    • 获取响应内容
      如果服务器正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML、JSON、二进制文件(如图片、视频等类型)。
    • 解析内容
      得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是JSON,可以直接转成JOSN对象进行解析,可能是二进制数据,可以保存或者进一步处理
    • 保存内容
      保存形式多样,可以保存成文本,也可以保存至数据库,或者保存成特定格式的文件。
    • 简要流程如下图所示

    2. 理解爬虫开发过程

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

    用户将自己的信息通过浏览器发送给服务器
    
    #Response:服务器接收请求,分析用户发来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片,js,css等)
    
    #ps:浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。

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

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

    import requests
    from bs4 import BeautifulSoup
    url='http://news.gzcc.cn/html/xiaoyuanxinwen/'
    res=requests.get(url)#获取校园新闻网中的内容
    type(res)
    res.encoding='utf-8'#改变显示的编码格式,避免乱码的产生
    res.text#以文本的形式输出所爬取到的内容

    运行结果:


    3).了解网页

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

    html_sample = ' 
    <html> 
     <body> 
      <h1 id="title">HTML</h1> 
      <a href=" " class="link"> This is 简单的html代码</a >
      <a href="# link2" class="link" qao=123> This is 另一个link</a >
     </body> 
    </html> '

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

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

    soup = BeautifulSoup(res.text,'html.parser')#把上述html文件解析成DOM Tree

    运行结果:

    select(选择器)定位数据

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

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

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

    # 找出标签为‘h1’的HTML元素,返回list
    print(soup.select('h1')[0].text)
    #  找出类名为‘link’的HTML元素
    for i in range(len(soup.select('.link'))):
        print(soup.select('.link')[i].text)
    # 找出含有特定id名的html元素
    print(soup.select('#tbxpwd1')[0].text)

     运行结果:


    3.提取一篇校园新闻的标题、发布时间、发布单位

    url = 'http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0320/11029.html'

    此处选择的是校园新闻的其中一片url=http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0313/10979.html

    for news in soup.select('li'):#对找到的列表进行遍历处理
        if len(news.select('.show-title'))>0:
            t=news.select('.show-title')[0].text#提取详细的信息,此处选取的是第一条列表的标题,链接网址,和发布单位与发布时间
            a=news.select('a')[0]['href']
            d=news.select('.show-info')[0].text
    print(t,a,d)

    运行结果:如要求所示的输出了新闻的标题、发布时间、和发布单位

  • 相关阅读:
    www.a.shifen.com
    gstack pstack strace
    性能分析 函数粒度 函数里的一条语句 汇编 反编译 机器指令 %rbx,%rbp
    taocrypt
    sign
    Python 3.8.0 final¶ Release date: 2019-10-14
    超线程
    Python classes to extract information from the Linux kernel /proc files.
    借助中间件优化代码 将请求RequestId在服务端接收到请求在处理业务逻辑之前生成
    JVM CPU Profiler技术原理及源码深度解析
  • 原文地址:https://www.cnblogs.com/zyd1234/p/10594472.html
Copyright © 2011-2022 走看看