zoukankan      html  css  js  c++  java
  • python——爬虫

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

    爬虫:

      客户端:

        Web应用本质

        APP

      服务器:

        URL -> API

     注:服务器提供API,URL有个专有名词叫API

    自动程序(爬虫):

      起始URL:

        https://www.cnblogs.com/

        下载源码:

    <!DOCTYPE html>
        <html lang="zh-cn">
        <head>
            <meta name="viewport" content="width=device-width, initial-scale=1"><meta charset="utf-8">
            <title>博客园 - 开发者的网上家园</title>
            <meta name="k
            ...
    

         --- 获取关键字,收录到数据库 -

        -- 再获取其他URL,href

        再继续访问......

      requests.post(...)

    自动登录需要注意几点:

    1、登录时提交用户信息

    2、接收返回值或者cookie

    3、携带cookie或者返回值,再去访问

    自动登录网站的几种认证方式:

      第一次获取cookie

        登录:cookie授权

      ....

      第一次访问:什么都不给

        登录:登录成功后,再给字符串

    python爬虫几个步骤:

    1、发送请求

      - 需要验证

      - 无需验证

    2、获取内容

      正则表达式,分类+分组

      //div[@class='item_list']

      //div[@class='item_list']/div

      //div[@class='item_list']//span

      //div[@class='item_list']//a/text()

      //div[@class='item_list']//img/@

    3、获取其他URL

      //a/@href

    4、自动递归请求url,重复执行1、2、3步操作

    ##############scrapy##############

     1、安装

      依赖:Twisted

      基于python2.7做

      

      pip install scrapy

      windows依赖模块:

            pywin32

      安装python2.7

        python-2.7.11.msi

        python-2.7.11.adm64.msi

        ==> 环境变量 C:python27   C:python27Script

      装pip

      安装steuptools 

        https://bootstrap.pypa.io/ez_setup.py

        ez_setup.py

        python ez_setup.py

      pip(下载pip源码进行解压安装)

        https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9

        解压

        进入模块

        python setup.py install

      pip install requests

      pip install scrapy

        scrapy需要装的一些依赖:

          VCForPython27.msi

          pywin32-220.win-amd64-py2.7.exe

          pypiwin32-219.win32-py2.7.exe

          lxml-2.3.win-amd64-py2.7.exe

          lxml-2.3.win32-py2.7.exe

        

        pip install scrapy

    2、使用

      环境变量:C :python27scrapy

      scrapy startproject spiderl

      创建spider文件(APP)

        -name = ''nnnnn"

        -start_urls

        -parse

    3、 scrapy crawl spider_name --nolog    #nolog不要显示日志

     **********************

    scrapy

    1、project

    2、app,爬虫

      - name

      - start_urls

      - parse

    3、crawl name --nolog

    4、parse

      直接处理请求:

        selector:

          //   #表示子子孙孙

          /  #从孩子里找

          //div[@class='c1']   #表示属性选择器

          //div[@class='c1'][@id='i1']   #两个属性

          //div//img/@src     获取img下的src属性

          //div//a[1]

          //div//a[1]//text()  #找a标签里面内容

          ====支持正则表达式

          //div/a


    Requests

    Python标准库中提供了:urllib、urllib2、httplib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。

    import urllib2
    import json
    import cookielib
    
    
    def urllib2_request(url, method="GET", cookie="", headers={}, data=None):
        """
        :param url: 要请求的url
        :param cookie: 请求方式,GET、POST、DELETE、PUT..
        :param cookie: 要传入的cookie,cookie= 'k1=v1;k1=v2'
        :param headers: 发送数据时携带的请求头,headers = {'ContentType':'application/json; charset=UTF-8'}
        :param data: 要发送的数据GET方式需要传入参数,data={'d1': 'v1'}
        :return: 返回元祖,响应的字符串内容 和 cookiejar对象
        对于cookiejar对象,可以使用for循环访问:
            for item in cookiejar:
                print item.name,item.value
        """
        if data:
            data = json.dumps(data)
    
        cookie_jar = cookielib.CookieJar()
        handler = urllib2.HTTPCookieProcessor(cookie_jar)
        opener = urllib2.build_opener(handler)
        opener.addheaders.append(['Cookie', 'k1=v1;k1=v2'])
        request = urllib2.Request(url=url, data=data, headers=headers)
        request.get_method = lambda: method
    
        response = opener.open(request)
        origin = response.read()
    
        return origin, cookie_jar
    
    
    # GET
    result = urllib2_request('http://127.0.0.1:8001/index/', method="GET")
    
    # POST
    result = urllib2_request('http://127.0.0.1:8001/index/',  method="POST", data= {'k1': 'v1'})
    
    # PUT
    result = urllib2_request('http://127.0.0.1:8001/index/',  method="PUT", data= {'k1': 'v1'})
    封装urllib请求

    Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。


    Scrapy

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架(类似Django)。
    其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

    Scrapy用途广泛,例如:

    • 数据挖掘
    • 信息处理
    • 存储历史数据
    • 监测
    • 自动化测试
    • ...

    详细参考:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/overview.html

    Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下

    Scrapy主要包括了以下组件:

    • 引擎(Scrapy)
      用来处理整个系统的数据流处理, 触发事务(框架核心)
    • 调度器(Scheduler)
      用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
    • 下载器(Downloader)
      用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
    • 爬虫(Spiders)
      爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
    • 项目管道(Pipeline)
      负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
    • 下载器中间件(Downloader Middlewares)
      位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
    • 爬虫中间件(Spider Middlewares)
      介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。
    • 调度中间件(Scheduler Middewares)
      介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

    Scrapy运行流程大概如下:

      1. 引擎从调度器中取出一个链接(URL)用于接下来的抓取
      2. 引擎把URL封装成一个请求(Request)传给下载器
      3. 下载器把资源下载下来,并封装成应答包(Response)
      4. 爬虫解析Response
      5. 解析出实体(Item),则交给实体管道进行进一步的处理
      6. 解析出的是链接(URL),则把URL交给调度器等待抓取

    python爬虫链接详细参考:http://www.cnblogs.com/wupeiqi/articles/5354900.html

    #################################################################

    爬虫博客推荐(python2.7):http://www.cnblogs.com/xin-xin/p/4297852.html

  • 相关阅读:
    OK335xS-Android mkmmc-android-ubifs.sh hacking
    OK335xS-Android pack-ubi-256M.sh hacking
    OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
    Qt Quick Hello World hacking
    Qt QML referenceexamples attached Demo hacking
    QT 5.4.1 for Android Ubuntu QtWebView Demo
    I.MX6 working note for high efficiency
    QT 5.4.1 for Android Windows环境搭建
    mkbootimg hacking
    Generate And Play A Tone In Android hacking
  • 原文地址:https://www.cnblogs.com/yard/p/6272289.html
Copyright © 2011-2022 走看看