zoukankan      html  css  js  c++  java
  • python爬虫边看边学(基础)

    网络爬虫(Web Spider)

    一、什么是网络爬虫

           百度百科是这么说的:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

           网络爬虫最重要的应用就是搜索引擎。搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源,通过相应的索引技术组织这些信息,提供给搜索用户进行查询。网络爬虫也为中小站点的推广提供了有效的途径。

           用python写网络爬虫语法优美、代码简洁、开发效率高、支持的模块多。相关的HTTP请求模块和HTML解析模块非常丰富。还有Scrapy和Scrapy-redis框架让我们开发爬虫变得异常简单。

    二、python网络爬虫的流程

           网络爬虫的流程其实非常简单,主要可以分为三部分:(1)获取网页;(2)解析网页(提取数据);(3)存储数据。

           (1)获取网页就是给一个网络发送请求,该网址会返回整个网页的数据。类似于在浏览器中键入网址并按回车键,然后可以看到网站的整个页面。

           (2)解析网页就是从整个网页的数据中提取想要的数据。类似于在浏览器中看到网站的整个页面,如果你想找的是产品的价格,价格就是你想要的数据。

           (3)存储数据也很容易理解,就是把数据存储下来,我们可以存储在csv中,也可以存储在数据库中。

    三、技术实现

           1、获取网页

              获取网页的基础技术:request、urllib和selenium(模拟浏览器)。

              获取网页的进阶技术:多进程多线程抓取、登录抓取、突破IP封禁和服务器抓取。

           2、解析网页

              解析网页的基础技术:re正则表达式、BeautifulSoup和lxml。

              解析网页的进阶技术:解决中文乱码。

           3、存储数据

              存储数据的基础技术:存入txt文件和存入csv文件。

              存储数据的进阶技术:存入MySQL数据库和存入MongoDB数据库。

    四、编写第一个简单的爬虫

           1、第一步:获取页面

    import requests
    
    link = r'https://www.cnblogs.com/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows;U;Windows NT 6.1;en-US;rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
    r = requests.get(link, headers=headers)
    print(r.text)
    

      上述代码获取了博客园首页的HTML代码。首先import requests,使用requests.get(link,headers=headers)获取网页。

            (1)用requests的headers伪装成浏览器访问。

           (2)r是requests的Response回复对象,我们从中可以获取想要的信息。R.text是获取的网页内容代码。

           2、第二步:提取需要的数据

    import requests
    from bs4 import BeautifulSoup
    
    link = r'https://www.cnblogs.com/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows;U;Windows NT 6.1;en-US;rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
    r = requests.get(link, headers=headers)
    soup = BeautifulSoup(r.text, 'lxml')
    title = soup.find("a", class_='post-item-title').text.strip()
    print(title)
    

      在获取整个页面的HTML代码后,需要从整个网页中提取第一篇文章的标题。

           这里用到BeautifulSoup库对爬下来的页面进行解析。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“a”,class_=’post-item-title’).text.strip()得到第一篇文章的标题,并且打印下来。

           那么,我们怎么从那么长的代码中准确找到标题的位置呢?使用Chrome浏览器的“检查(审查元素)”功能就能找到元素的位置。

             (1)使用chrome浏览器打开博客网首页www.cnblogs.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,或按F12。

             (2)出现下图审查元素页面。单击上方的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。

             (3)在代码中找到深色的地方,为<a class=”post-item-title” href=https://www.cnblogs.com/TomDwan/p/14550984.html target=’_blank’>文件上传漏洞全面渗透姿势总结</a>。可以用soup.find("a", class_='post-item-title').text.strip()提取标题。

           3、第三步:存储数据

    import requests
    from bs4 import BeautifulSoup
    
    link = r'https://www.cnblogs.com/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows;U;Windows NT 6.1;en-US;rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
    r = requests.get(link, headers=headers)
    soup = BeautifulSoup(r.text, 'lxml')
    title = soup.find("a", class_='post-item-title').text.strip()
    print(title)
    
    with open('title.txt', 'a',encoding='utf-8') as f:
        f.write(title)
    

      存储到本地的txt文件非常简单,在第二步的基础上加2行代码就可以实现。txt文件地址应该和python文件放在同一个文件夹。

  • 相关阅读:
    3组Alpha冲刺5/6
    3组Beta冲刺4/5
    3组Alpha冲刺6/6
    3组Beta冲刺2/5
    3组Beta冲刺3/5
    delegate Demo (一个关于System.Timers.Timer的Demo)
    System.Web.HttpException 与 HTTP Error 404.13 Not Found问题解决说明
    常用SQL关于表的操作
    设计模式学习笔记:单例模式
    JS 实践杂记
  • 原文地址:https://www.cnblogs.com/shixiaoxun/p/14578502.html
Copyright © 2011-2022 走看看