• 理解爬虫原理


    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2881

    1. 简单说明爬虫原理

      向网站发出请求,采取遍历把公开信息都得到,然后筛选有用的信息返回自己的服务器。

    2. 理解爬虫开发过程

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

       1.首先选取一部分精心挑选的种子URL;

               2.将这些URL放入待抓取URL队列;

               3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

              4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

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

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

    r = requests.get('https://www.csdn.net/')

    3).了解网页

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

    html_sample = ' 
    <html> 
        <body> 
              <h1 id="title">Hello Word</h1> 
              <a href="#" class="link"> link</a>
              <a href="# link2" class="link" qao=1> link 2</a>
        </body> 
    </html> '

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

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

    select(选择器)定位数据

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

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

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

    # 导入相关库 
    from bs4 import BeautifulSoup
    import time
    import requests
    
    url_lianjia = 'https://hz.lianjia.com/ershoufang/'
    headers = {#模拟浏览器请求,可以用 cookie模拟登陆状态
        'User-Agent':'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
    }
    time.sleep(4)  #延时请求
    
    wb_data = requests.get(url_lianjia, headers=headers)  #使用requests向服务器发起get请求,通过header模拟浏览器行为
    soup    = BeautifulSoup(wb_data.text, 'lxml')  #将服务器返回的对象使用BeautifulSoup解析,wb_data为response对象,需要文本化
    # 确定要抓取的元素位置
    titles = soup.select('body > div.content > div.leftContent > ul > li > div.info.clear > div.title > a') #返回值类型为list
    imgs = soup.select('body > div.content > div.leftContent > ul > li > a > img')
    total_prices = soup.select('body > div.content > div.leftContent > ul > li > div.info.clear > div.priceInfo > div.totalPrice > span')
    unit_prices = soup.select('body > div.content > div.leftContent > ul > li > div.info.clear > div.priceInfo > div.unitPrice > span')
    tags   = soup.select('body > div.content > div.leftContent > ul > li > div.info.clear > div.tag')
    # 数据格式化,最终放到字典中
    for title, img, total_price, unit_price, tag in zip(titles, imgs, total_prices, unit_prices, tags):
        data = {
            'title': title.get_text(),
            'img': img.get('src'),
            'total_price': total_price.get_text(),
            'unit_price': unit_price.get_text(),
            'tag': list(tag.stripped_strings)
        }
        print(data)
    }

     

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

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

    要求发布时间为datetime类型,点击次数为数值型,其它是字符串类型。

  • 相关阅读:
    Java中的I/O 线程 网络
    20169214 2016-2017-2 《网络攻防实践》第六周学习总结
    20169214 2016-2017-2 《网络攻防实践》第五周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第五周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第四周学习总结
    20169214 2016-2017-2 《网络攻防实践》第四周学习总结
    20169214 2016-2017-2 《网络攻防实践》第三周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第三周学习总结
    20169214 2016-2017-2《网络攻防实践》第二周学习总结
    Android开发设计 实验报告
  • 原文地址:https://www.cnblogs.com/hekairui/p/10634215.html
Copyright © 2020-2023  润新知