Python Scrapy中yield Request的理解

最近在看《learn scrapy》中的关于爬虫的部分,对于parse中的yield Request用法不是很理解,现在总结下。

</pre><pre name="code" class="html"><pre name="code" class="python" style="font-size:24px;">def parse(self, response):
<span style="white-space:pre">	</span># Get the next index URLs and yield Requests
<span style="white-space:pre">	</span>next_selector = response.xpath('//*[contains(@class,'
<span style="white-space:pre">					</span>'"next")]//@href')
<span style="white-space:pre">	</span>for url in next_selector.extract():
<span style="white-space:pre">		</span>yield Request(urlparse.urljoin(response.url, url))
<span style="white-space:pre">	</span># Get item URLs and yield Requests
<span style="white-space:pre">	</span>item_selector = response.xpath('//*[@itemprop="url"]/@href')
<span style="white-space:pre">	</span>for url in item_selector.extract():
<span style="white-space:pre">		</span>yield Request(urlparse.urljoin(response.url, url),
<span style="white-space:pre">			</span>      callback=self.parse_item)
</pre><pre code_snippet_id="1710126" snippet_file_name="blog_20160607_3_196221" name="code" class="python" style="font-size:24px;">parse相当于是一个迭代器,这个迭代器有两个部分组成,
<span style="font-size:24px;">一个是</span><span style="font-size:18px;"><strong><span style="font-family: Arial, Helvetica, sans-serif;">yield </span><span style="font-family: Arial, Helvetica, sans-serif;">Request(urlparse.urljoin(response.url, url)),主要是下一页的的链接</span></strong></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">另一个是</span></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"><strong>yield Request(urlparse.urljoin(response.url, url),</strong></span></span><strong style="font-size:18px; font-family: Arial, Helvetica, sans-serif;">callback=self.parse_item)页面中其他链接</strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"></span></span><pre name="code" class="python"><strong>
</strong>
<strong>处理request的下载器相当于遍历了两个列表,遍历遵从深度优先的策略,即先第一个迭代器中的选某一页,在到第二个迭代器中</strong>
<strong>处理对应页的全部链接。可以理解为如下图</strong>
<strong><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8sAAAHNCAYAAAApN+mbAAAgAElEQVR4AeydCXgV1fn/XzCsgYQ1LGGRVRahbKJWRMWt4oL6U1xatUVFxV8r1t1al/J3QW1dquhPkNalqNSFolKtFYtaEWRTBNn3sISwJCEJIQj/53vCO5mZO/dmkkzu+j3Pc3NmzvKecz7n3Ml95z2LHI7gduzYESG2ImrLli0VNxGugpa3atWqCKVVRAVdbtDy2I6KvrJfcVzZaVRc++XCcVXBzH7llx+/53ZqFdccVxUs7FccV3YaFdd+uXBcVTCzX/nlx+eVnVrFNcdVBQv7FceVnUbFtV8uHFcVzOxXfvnF6/NqyZIlh/fs2WNvkrmuK3QkQAIkQAIkQAIkQAIkQAIkQAIkQAIOAlSWHTh4QwIkQAIkQAIkQAIkQAIkQAIkQAIiVJY5CkiABEiABEiABEiABEiABEiABEjARYDKsgsIb0mABEiABEiABEiABEiABEiABEiAyjLHAAmQAAmQAAmQAAmQAAmQAAmQAAm4CFBZdgHhLQmQAAmQAAmQAAmQAAmQAAmQAAmk5eTkhKVQWFgoZWVlYeM1Ij8/Xy8j+kHLKyoqkkj118oEXW7Q8tgO7Smnz3Hl5KF3frlwXCkxp++XH7/nTm56x3GlJJw+x5WTh9755cJxpcScvl9+fF45uekdx5WScPocV04eeueXC8eVEnP6fvnF6/OqtLTU2aAjd2nZ2dmeEQjMzc2VrKyssPH2iEhyNF3Q8oqLiyUW5bId2qNOn/3h5GG/i8U4ZX/Ye8B5zf5w8tA7P1w4rpRWqO+HH/9/hHJDCMeVNxeEclx5s/HDhePKmx3HVc24cFzVjF+8/h/My8vzbBinYXtiYSAJkAAJkAAJkAAJkAAJkAAJkEAqE6CynMq9z7aTAAmQAAmQAAmQAAmQAAmQAAl4EqCy7ImFgSRAAiRAAiRAAiRAAiRAAiRAAqlMgMpyKvc+204CJEACJEACJEACJEACJEACJOBJgMqyJxYGkgAJkAAJkAAJkAAJkAAJkAAJpDIBKsup3PtsOwmQAAmQAAmQAAmQAAmQAAmQgCcBKsueWBhIAiRAAiRAAiRAAiRAAiRAAiSQygSoLKdy77PtJEACJEACJEACJEACJEACJEACngTqrFq16rBnjIiUlJRIo0aNwkVb4UVFRZKenm7dh7sIWl5+fr5kZmaGK84KD7rcoOWxHVZXOS44rhw4rBu/XDiuLGSOC7/8+D13YLNuOK4sFI4LjisHDuvGLxeOKwuZ48IvPz6vHNisG44rC4XjguPKgcO68cuF48pC5rjwyy9en1e7du2SXr16SbNmzRztksMR3I4dOyLEVkRt2bKl4ibCVdDyoOj7cUGXG7Q8tsO7FzmuasaF46pm/Pg99+bHceXNhc+rmnHhuKoZPz6vvPlxXHlz4fOqZlw4rmrGL16fV0uWLDm8Z8+ekMZxGrbz3QHvSIAESIAESIAESIAESIAESIAESECoLHMQkAAJkAAJkAAJkAAJkAAJkAAJkICLAJVlFxDekgAJkAAJkAAJkAAJkAAJkAAJkACVZY4BEiABEiABEiABEiABEiABEiABEnARoLLsAsJbEiABEiABEiABEiABEiABEiABEqCyzDFAAiRAAiRAAiRAAiRAAiRAAiRAAi4CVJZdQHhLAiRAAiRAAiRAAiRAAiRAAiRAAlSWOQZIgARIgARIgARIgARIgARIgARIwEUgLTc31xVUcVtQUFBxE+GqsLBQIsnRrEHLKykpiUm5bIf2qNNnfzh56B2/H0rC6fvlwnHl5KZ3fvnxeaXEnD7HlZOH3nFcKQmn75cLx5WTm9755cfnlRJz+hxXTh56x3GlJJy+Xy4cV05uBw4ccAYcuUvLysryjNDAyuKRrqysTPykQ1o/6fzKy8/P9yUv6HKDlsd2gGio8zsOkJPjKpQfx1UoE4RwXNWMC8dVzfghN59XoQw5rkKZIITPq5px4biqGT/k5vMqlCHHVSgThCT682rbtm2eDeM0bE8sDCQBEiABEiABEiABEiABEiABEkhlAlSWU7n32XYSIAESIAESIAESIAESIAESIAFPAlSWPbEwkARIgARIgARIgARIgARIgARIIJUJUFlO5d5n20mABEiABEiABEiABEiABEiABDwJUFn2xMJAEiABEiABEiABEiABEiABEiCBVCZAZTmVe59tJwESIAESIAESIAESIAESIAES8CRAZdkTCwNJgARIgARIgARIgARIgARIgARSmQCV5VTufbadBEiABEiABEiABEiABEiABEjAk0BaTk6OZwQCCwsLzQHTYRMcicDh3H5c0PKKiookUv21TkGXG7Q8tkN7yulzXDl56J1fLhxXSszp++XH77mTm95xXCkJp89x5eShd365cFwpMafvlx+fV05uesdxpSScPseVk4fe+eXCcaXEnL5ffvH6vCotLXU26MhdWnZ2tmcEAnNzcyUrKytsvD0ikhxNF7S84uJiiUW5bIf2qNNnfzh52O9iMU7ZH/YecF6zP5w89M4PF44rpRXq++HH/x+h3BDCceXNBaEcV95s/HDhuPJmx3FVMy4cVzXjF6//B/Py8jwbxmnYnlgYSAIkQAIkQAIkQAIkQAIkQAIkkMoEqCyncu+z7SRAAiRAAiRAAiRAAiRAAiRAAp4EqCx7YmEgCZAACZAACZAACZAACZAACZBAKhNIS+XGs+0kkCwEjhs9RprsXO9oTmb2UZKf86MjjDckQALhCXTv3l0mT54cPgFjao3AHQ/dxOdVrdGl4EQn0LFjR3n11VcTvRmsPwkkJAEqywnZbaw0CTgJQFH+z/gZjsBTn75QLn66mSOMNyRAAuUE3h2/N+Q7I09fSDwxIoAXe3xexQg+i417Au+O3xz3dWQFSSBZCXAadrL2LNtFAiRAAiRAAiRAAiRAAiRAAiRQbQK0LFcbHTOSAAmQAAkkMoGxGbtN9XcdSpN39mWY623bthm/Xr160qpVq0RuHutOAiSQRAT4bEqizmRTEooAleWE6i5WlgSqRuCwHK5aBqYmgRQk0LLuwZBWl5WVhYQxgARIgARiTYDPplj3AMtPNQJpOBg6nCsoKAgX5QgvLCyUSHI0cdDySkpKYlIu26E96vTZH04eeher74eWT58ESMA/gaKiIisx/q8F/bwPWl6yPHct6LwgARLwJOB+NnklCvr5ErS8ZHlesR1eo08kVr93g+qPAwcOeDYsLSsryzNCAyuLRzq85fKTDmn9pPMrLz8/35e8oMsNWh7bAaKhzu84QE6OK1CgFTl0FDGEBPwSKP/+pKenWxn0uaK+FeFxweeVB5Qq/j7wlsBQEiABEPB6NnmR4fPKiwp/J3pRof7hpKJLHZyhItzgy02E9yRAAiRAAiRAAiRAAiRAAiRAAilPgMpyyg8BAiABEiABEiABEiABEiABEiABEnAToLLsJsJ7EiABEiABEiABEiABEiABEiCBlCdAZTnlhwABkAAJkAAJkAAJkAAJkAAJkAAJuAnw6Cg3Ed6TQFIR4KZfSdWdbAwJkAAJkAAJkAAJkEDUCFBZjhpqFkQCtUyAenEtA6b4pCbA70/Mu5fnwse8C1gBEiABEiABFwEqyy4gvCUBEiABEiABEkhMAl89lik7tm9KzMqz1klJIDP7KBlxR5OkbBsbRQKpQIDKcir0MtuYsgQO01qWsn3PhpNAKhKAonz3Q39NxaazzXFK4LEHfhmnNWO1SIAE/BBIy8nJCZuusLBQysrKwsZrBA619uOClldUVCSR6q91CrrcoOWxHdpTTp/jyslD7/xy0fT0SYAE/BMoKCiwEh86dEiCft4HLS9Z/n9Y0AO4OMy3hAFQpIggCXQ6dIocqLNPttdZWG2x7meTl6Cgny9By0uW5xXb4TX6RPz+Po3XcVVaWurZsLTs7GzPCATm5uZKVlZW2Hh7RCQ5mi5oecXFxRKLctkO7VGnz/5w8rDfxWKclpdP07K9H3hNApURyMjIsJK0a9eO/wctGs6LoP8POqXzjgSSj0D9w01E6lS/Xe5nk5ekoL+XQcvj70SvXisPi8XvRPaHsz/y8vKcAUfueHSUJxYGkgAJkAAJkAAJkAAJkAAJkAAJpDIBrllO5d5n25OMAK3ISdahbE6tE7B/Z+zXtV4wCyABEiABEiABEkgAArQsJ0AnsYokQAIkQAIkQAIkQAIkQAIkQALRJUDLcnR5szQSIAESIAESIIEYE3jn9YdlzZo1Ma4Fi082AlltO8mvbnwo2ZrF9pBAShOgspzS3c/GkwAJkAAJkEByEfCzGTYU5dmzZydXw9mamBMYMWKE+Bl/Ma8oK0ACJOCbAKdh+0bFhCRAAiRAAiRAAiRAAiRAAiRAAqlCgJblVOlptjNFCXDTohTteDabBEigEgI8j7kSQIyuFoH0BiVy6HBdKTnQoFr5mYkESCC+CNCyHF/9wdqQAAmQAAmQAAmQAAkkMIG6dQ4lcO1ZdRIgATuBtNWrV9vvHdclJSWSn5/vCPO6KSoqEhxsXZkLWh7qFqn+Wp+gyw1aHtuhPeX0Oa6cPPTOLxdNT58ESMA/gV27dlmJ9+3bJ0E/74OWlyz/PyzoAVz4nU9Dy3IAsCkiLAG/4zCsAFeE+9nkija3QT9fgpaXLM8rtsNr9In4/X0ar+MK9fJyaT169PAKN2G5ubmSlZUVNl4jcnJyJDs7W2/D+kHLg6Icqf5akaDLDVoe26E95fQ5rpw89M4vF01PnwRIwD+Bli1bWonbtWsnQT/vg5aXLP8/LOhBXHCHpSAoUkZ1Cej4U7+6clz53M8mV7S5Dfr5ErS8ZHlesR1eo0/E7+/TeB1X4Qy/XLPs3d8MJQESIAESIAESSGICtCwnceeyaSRAAiQQEAEqywGBpBgSIAESIAESIIHYEwh6+mvsW8QaJBIBHX/qJ1LdWVcSIIFQAlSWQ5kwhARIgARIgARIIMkJ0LIcuw7etm2bYJkDHQmQAAnEOwHuhh3vPcT6kUCNCODdNj9kwDEQOgZq9MViZhKIOoHTTjtNsOmc3SEMimd1HdZeuj+LFi1yhOH+0ksvDdlQ9YYbbpA5c+Z4Fu1VV3vC3/zmNyFteeyxxwRl0ZEACZBAPBGgZTmeeoN1IYGaEAh4M5GaVCXWed986DsZcm62dB9SsVmT1glxlz/QX2+j7i/4MMeUifq5HeK8wjXdJy+vkUZN6smwyzprkKc/9baF8vMJP5EGjZ2PeOTv8pPmnlw8BSV7oH2eJL8/yd7bIe1LJMvy3Xffber/3HPPyZ49e2TdunVy9dVXm7BXXnnF+OvXr5fhw4fLlVdeGdLWcAFNmjSRtm3bOqL79u0rn376qSN8+vTpJo2d2apVq0x5UNZnz55tlQvlu2fPnpKeni5I77UZUteuXa14Lfyaa64RtGXgwIFGaV6xYoUlU9PQJwESIIFoE3D+kop26SyPBEiABAImsHNjkaxdtFtOGl2hUK5ZsMsoiF++tVFyNxY5StQ4R6DPm80/5Mvij7aGpC4uKDPlZHVOl8YZ9RzxG5buNfdtujaRjr0zrTjU4+OXVkdUln/4704ZdHZ7K0+4i21rCkMUZaQ989ru8vCo/8jYZ4+T1p3Tw2VnOAnEiID97UX1q5Bs7z0++OAD6d+/v9x3330yZswYmTp1qoHz/PPPGyX1xhtvlLFjx8qgQYMc0CZOnCiZmZmCeHWff/65uYRSDedWlLdv326UcHs4wuz3yAcFuFWrVoK6LVu2TDp27ChQ6FHP7777Trp06WLiCgoKBB89uUQtx3v37rXie/XqJfPnz5fTTz9dLr74YiNn5MiRgvBEds5xqGNb/URuGetOAqlFgMpyavU3W5tiBFLx3/LMZ1dI2+5N5V9T1kirDo2l5Ijies64nrLo460CBfbl2xaaOAyHjUv3ysCz21dqrfUaOh16Zwo+bgclesYTy+WySizY9v6BVfmssT3MpHko9c3aNpT9+w46lOfCXaUy5Pxsk6a0+KB88cYGOePa7u7izb3KRjr7C4KhF3SQvTv3S0nxQcnP3S+fvbJOLryjj0Nx9xTIQBIggagTwLTrjIwMOe+880zZI0aMMP7MmTPlrrvuMtewJH/yySchyvKrr75q4i+88EJL2Z07d64JU2XZ3IgIrMlQruFwDSUYbsuWLUYhV8uyCRSRd9991yjtsEyfeuqpAh9KMeoyY8YMQZnt27e36q35mjZtKoWFheYW8fhAyYf8lStXmvSwmrvrp/npkwAJkEC0CVBZjjZxlkcCJFBrBP798hrpP6KtUTChcO7eWmwprDOf+sFSCt966Dtp3zPDoYhqpSBj15ZiGewxjfv7OTtk3aLdcsGtvTW5p7/xu70C5bwqThXatQt2GeUWCvzn09ZLwyZpsuw/O4yopi0bGAXZLheW9HBWYrRl6KiOUlp0UPbu2C+wZh/z09Ym+ydT1sjwK442TBq6pmvb5fOaBJKVgH1Kcby2EVOZTz75ZHn//feN0gxleevWrcZ6izoPGTLEKMIfffSRXHTRRZYFV9szbNgwwfrgt956ywRpm9XXdPDPPfdccwvrMzbfgjUYlmBYgd3pMRX8tddeM+mXLFkiL774omANM6ZmY4r1pk2bzAdTqu2ue/fyl3vNmjWzplsjz0knnWSU7RdeeEGuuuoqWbhwobz00ktGrj0/r0mABEgg2gTScDB0OIe3hH4c3hJGkqMygpZXUlISk3LZDu1Rp8/+cPLQu1h9P8rLV/ui1iZ5fVhmYY0dci6mKR+WYZd1kqm3YbOYwwIld+DP2knH3hnmfvC57WX5FztFTFonkx/+myvrFu8xU7nv/ccpjsjtawpl49I9RzZNc0TJn8fMld4nZZnATcvzZf++MtnwLdKWOyjgmB5+2xvDpEHjozTY+JiC3fuk1nLGtd0c4Ys/zpHMrAZy2QP95K2Hlspp13SRzKyGHlbg8jZuX1Ox+Q8UZbhNy/bIsae0MfnBQtdEoy0N0o86wgQpU2esOCC7boqKKqbp4/9a0M/7oOUly3PX1Q28dRGA9RZWZp0ODWXzmGOOsZTj1q1bW9f2rE8++aSccMIJAgXYr7UW1mdYl3XqtF0erjEt+9FHHzWW6DPPPFN+8YtfGPnIh3XTAwYMECjQcF5TwVUeFHG0CZZllIUXAdOmTbPaCAWcroKA+9lUEVNxFfTzJWh5yfK8Yjsqxpz9Kla/d4PqjwMHDtibY12nZWWV/7izQlwXlcUjeVlZmfhJh7R+0vmVl5+f70te0OUGLY/tANFQ53ccICfHVSi/VAvpd1pbo4TCoozpy3Cd+mTKv19ea66hSK78Ks/CgunZUHB/PfVEK0wvWncqX8+LvG4FVtO4/cJdByKmxdTs3I37QhRlyFn44VZj4cV1+TrobXLBrb1k7HNDrfTIe9kp/eSRUXPkgt/2MgqwvQ5QiPGBmz9zS0hdRvyyq7z/7EqjLOPFAmTomulI1ml7GalwDUueOn2uqK/hXj6fV15Uqvb7wFtCNUKT8L3P66+/bkBgXS8crL2YtoxpzZEcpkfDUvvggw+a6dSR0moclFgoweGcKuwaj7r16dPH1EkVXJ3SrVPFNS0UbUzTnjdvntxyyy2WYgxlHpuC2WV7rZVWOXHt6/hTP6DKej2bvETzeeVFhb8TvahQ/3BSCXeyAKdhOznxjgRIIEEJqLXWa6doXUNsV4wRZlee7c1u2rK+ZHVuYpTOoaM6SEarBvZoX9ewamPNNJTeSK4gr1QaZdQz06uh5GJNMTYFKy3+0VKUodyiPupUKa5MycWLg5wVBUa+5p351ArJ21Js6rZu0R5zjbjy3bOdFm/NQ58ESCC2BD777DN55plnLGXSbVnGNGuvXadRayisH3/8sbzxxhu+G2HfLAyKudvp9Gwo7EOHDjUWYtTJ7WA5xkZkqjRjTTMU9+OPP95MJ0eb4KA8Q1m+5557zE7fzZs3N7t+4wgq+wZlbvm8JwESIIHaJkBlubYJUz4JkEBUCUDJXP1NnmVlrW7h2PTqj1d8Kf98fpWZBl1VOUV7SmXoBaHHQ7nlQBFXhVotwmgDLMlfTd8kfU/NkrnvbDLKMhTdnZuKRBVeyAqn5GJqNxymcKvDVG5Y1Mf80blrrsbTJ4FYEnDuHlz9mhz2uaTAvQ63+iXWfk4oj1irjGmx2A0bG3BhB2pYjtVBqXzggQcc0621jdddd51MnjxZzj77bJNcwzUvfA3buXOn2YRLZSNc4zQ91iJjUzFMBcf14sWLTRTOXcZ6Z6xphkOdYaXW/DiSCm7WrFkmH/JCyYeifeedd5o4WM/ffPNNc40/mtcKiPMLNSjbx6EVphdx3gZWjwRIoIIAleUKFrwiARJIAgKbl++VmX9aIfb1uzjKCdOkdUo2momwFu0bhW0xLNWw8kKBrcyCG04I1hdXx0HZ79S3mVGY+0qWYzr29//ZYSnXXrJhTVbntrJjzfT/vnyCRlu+3YptBfKCBBKVQBIqJNj4Cg7WYVh6MbUaRyu51xWHW5d8xRVXyJQpU4yFWRVme/dC8YXDNGrEwyL88MMPS+fOnc36ZHta9zWUXXVaPpR7OHf9NJ3dhwKNHb/RNkwLvfTSS+3RiXudhOMwcTuDNSeB6hOgslx9dsxJAiQQhwSwcdfwK492HAWFKdfYmMvv+mNtFtJjwy+s9a2qNRbKuZ9dpqGofvx/q6V9z/K1h9iMDIp+m6PLLUZQuHWKudZLfUzh1inisBpDGUbb4boPaWnWP2sd5r67WboNamF2xt5ZdFD2F5ev696xbp+xXNunqKt8+iSQzAQSzWL5+OOPm3OTJ02aJLhG/bGhzt/+9jejZOLcY3eb7Pf333+//OxnP5OzzjorJF2bNm3M5lqY7q1W3UceeUQ+/PBD6devn9nESy2/OiZgPb799tvliSeeMOck417Lc/uax+5rGuyiDYc2YXo3HJRnKPh0JEACJBBrAlSWY90DLJ8ESCAwArAAw/J67KltQqzIbsuyFgpl+PIH+oc9funE/+kkf7vvW9FpzZrPjx/uSCd7XijCOg37Xy+tMdPHdU0y0uHYJ7tFHGG4h2UcbT1rbHezaRd2+D7n5p5Gef582gZTBBRlrQNeFlzz+CBLucaa6v4j2pi8ukO2vV68JgESiA8CUFiXLVsmV199tbVmWWuGqdJQNu+9916ZMGGCBhv/lVdecdzD6vvtt9+aadL2CFiG33vvPROkirLG4zgpnIV8zTXXyLhx4xzTvqFEwwoMqzSmhEO5hsJrX+OMezjNi+namA6+e/duLcLspI1ycUSWKuRozz/+8Q9LcbcS84IESIAEokyAynKUgbM4EogmAX1zH80yY1lWq06NjfI4eCSOjyp3f7ltkTTOrCdNWtSX08d01WDjb/kh30yzRj5lpesm9R6yvnp7k8x6fpU53gnxGucQZltbt3DWVmnbrYnsLzpoWYUbNDpKTru6a9i8KssuG2VBmbbXG9PC9f788ceYbMjTbXAL6xoXCNN2Qbnu9dPWgo3LEI6XCvt2lwraZi9P60CfBFKBQCKMfSiXI0eONB/0idYZu0/jzGK9x5RpezyucYSTxptIzDg5cs6xhkMRx8Zad9xxR0h+zQM52CAMuzFrPsRdfvnlJgni4RAHOdjFGrvKYir3119/bY6u0rxIi52yEYcdsHNycmTw4MFmEzCVAR/t+eKLLxzlmUL4hwRIgASiTIDKcpSBszgSqDUCquXVWgGJIdiuKL/1h6VGUT7p0k7y3hM/hDRgf9GPRokOiXAFnDOup0waO88V6ry9Z8ZwKwDK9YhruhpFF4rq5uX50v/0tkY5tRJFuLBPr46QzHfUrpxis8P2l9M3yjHHt5IPnl1p6udbQNImtC0q5PcnaXs5kRuGDbC8HCy+QTi/cuxHOlVWLtJqeliL3Q7WcHw0jTte773yahx9EiABEogWASrL0SLNckiABKJGAMrmO48ukx7Ht5RhozsLLMjqsEYY05fbdEmXhbNyjLVY48L53Ye0kH6ntZGln+2QLgPKN64JlxYKetbR6dL3lPIz7LHuWeuDadYnX9nZ1ClSfqw3tiv97rRoT4feme7gsPeX3V++Izbq8cqdi2Xf7gOybvFu6dg305qWHTYzI0ggwQj4fe9ht5ImWBNZ3XgmcOQdnN9xGM9NYd1IgARE0jAFJpzDxhFlZWXhoq1w7F7oxwUtr6ioyEzhqazsoMsNWh7b4d2DHFc14+KdO/lDYT3F2cL/c09fT0UQ05p7DG1pKY2wGtsdFF0vB3n79hwwirBXvCrErTo2lvPHO89WxiZcv/rjIHn/6RXy7mPLpVGTeiHKMKZGw8EKntG6oWD6OKzTiz/eJjvWF1npMb27te3MZa0LXgLAgt0w3fusZMh/86Gl5uUAFHhMFX/+unnSdVBzUWVaZaWyj6N51B06dMhsoMT/g0qkwg/6/2C5ZJulv6IoXpFAEhGo/hh3P5u8oAT9vQxaHn/vevWamA36vGOcoewPJw+9C2pclZaWqkiHn5adHf4c0NzcXMnKKreOOHJ53ESSo8mDlldcXCyxKJft0B51+uwPJw/7XSzGqb38VLiG8rdnW4kMHdUhouUWLKC8XvN4+fRG3U1aGYVTHJHu11NDj11as2C3sVA3zqgXVkFX2VCim7dvZOqpYepjI66bpxxv6gal+uQrjhZYtGGhXjYnV/485mtNKi/97zfGOowAbPAFKzReAmS2biBTblkox55a8dwGF92cDG3W9iIPNkKDLLxggAWernwXXuWA82KDft4HLS9ZnrvKPJo+LcvRpM2yakoAO4Srw7PJywX9fAlaXrI8r9gOr9FXHhaL37tB9UdeXp5nwzgN2xMLA0mABBKNQKRpy7DEui3IqjTWpJ2wJsMSHU7B9pIdSSnVOrkt01CYdVo3yizYud+IbmDb7RoBdoUbCnZmVgPp1DfTskq76wMFGy8AYJWmIwESIAESIAESILkUyVEAACAASURBVAEScBKgsuzkwTsSIIEkJAClEFbaoJ0qt0HLjSQPZUYqV+NUuY4kS+PAh44EkoVA9Se6JgsBtiOWBHT8qR/LurBsEiCBmhOgslxzhpRAAnFMgP+u47hzWDUSIIHaIOBzZyVOw64N+JQpcuT/rs9xSGIkQALxTaBufFePtSMBEiABEiABEiABEiABEiABEiCB6BOgZTn6zFkiCZAACZAACZBALRHwO5+GluVa6gCKNQT8jkPiIgESiG8CVJbju39YOxKoEQH+s64RPmYmARIgARIgARIgARJIYQJUllO489l0EiABEiABEkhFAg0aNpZRo0alYtPZ5lok0LBho1qUTtEkQAKxIEBlORbUWSYJRI1A8tqWd24sMkclRQ1llArC0VC6o3VVivTLY+2C3dLNY2dwv/mrUiemJYF4JXDjrc+aqmU2Lj+GLV7ryXqRAAmQAAnElkAaDhwP5woKCsJFOcILCwslkhxNHLS8kpKSmJTLdmiPOn32h5OH3sXq+6HlJ6MPhXLKLYvkqkd/Ih16Zzia+OnL6+SH/+bJ/04d6giPxc2WH/w9Q7VuX/19s6xdtDukXVBk33pomVz/3GAJd8zTZ69skOL8MvnlHweoOE//n5PWyImXdAg5ezmjdUN5bsx8ueyBvkn5EsIThkdgUVGRFYr/a0E/74OWlyzPXQt6ABdV2YT48OE6Yu1eHEDZFEEC5QTqSFXGoR9q7meTV56gny9By0uW5xXb4TX6RGL1ezeo/jhw4IBnw9KysrI8IzSwsnikKysrEz/pkNZPOr/y8vPzfckLutyg5bEdIBrq/I4D5OS4AoXktSK7R8e7j/4g3QaVn5sMhXTj0r2Ss6JQRt/f1yjKA3/WVlRRzc/dL9/M3FqpEukuozbvX7vnWzn21CwZeHY7RzE/vbSj4ONWiFfN2yVZR6eb8NLiH6Vg5/4QhRZK9nXPDLLkIZ1bjka26dJELy0facENZbXunG7Cl83Jlaqc12wJS8iL8u9Penp529EEfa6oH6lZfF5506kKF28JtRuaX9ygdgugdBIIiIDXs8lLNJ9XXlQqnufeseWhfp9X/N3uTdEvP+QOcpwG1R/btm3zbBinYXtiYSAJkEC8Elg4a6s0zqxnlMp/T1knJ1/RSTr3a2Y+7z+90ih8zdo0FMSdcV1XycxqaHy78hhpqnOkuHBMoJi7LdxI6xWG8KYtGsj5448JJy4kfPFH2401GMrrzKdWygW3HmMszRfe0UtWfpVnpf/u3zvMdXFhmXz/n1yjPKviayWyXYDJv15aIyUFB6VRRsW/g7/etkRadmwkG7/Ll2VzdpqXELZsvCQBEiABEiABEiCBlCBQ8esoJZrLRpIACSQyASilW1eVW5DRjh7Ht5CFs7YZZQ5rcdv3bGpNL4Y1GRbnk0Z3Cmny89fNN2HDr+wcEv/qnd9K75NayenXdg3J5w5Q5RXh98w42R1t3dsttLg+Z1x3Kw4XqrR6KdBQ3ps0ry9qDcbUc7UYw2p+3Khs+eYfOTL0/GxHne2yMI1bFenC3aWy+ONtMuOJFdK5f6ZR2jF1vf8ZbSyL8vQ/LDP1i4ep7A5QvCGBgAjMevsxWbNmTUDSKIYEygm0btNRrvjVA8RBAiSQRASoLCdRZ7IpJJDsBHas3+ewyPYb0cZYlNHu/UUHLUUZ9+f+poeZUhzO6os0n0/bGKIs+2UI6+u2tYXSrltT40fKh/XE6xbvkcZN61nJNny717rGBSzBJ1zUwVJYNRKKMKznaqVWyzcUep0ijTXaVz/+E0GdkNa9gResy6r8Iy2mf9uVaSjceIGgCn/uhqK4WPOtDOiTQNAEoCjPnj07aLGUl+IERowYkeIE2HwSSD4CVJaTr0/ZIhJIWgKDR7Y3bYMl1O4wFXnz8gKzNrljn4oNvxC2v/CgpWja82DNM9b5Yuq2XXG0pwl3DUstpiljMy3UBUpzZQ4Kqiq8sILD2ZXa+e/nhCjKSAPlFg7K9a6cElPnm6cMtZRfKM9w2EEb9ejQJ9PcV/YH1my0Qx144MUCrPG65jse13trfemTQE0JHA56B6aaVoj5k4IAdlg/dLiuFJbUT4r2sBEkkOoEqCyn+ghg+5OaQLL+GBwxpktIv306db0Js8chrOeJLcWLQ4vsRtKoaZax6A7/eWfbcU2HzVZpXnm00FadGst5t/Q0cnVbtUjpsfka4jXN+m/3yor/7pSbX3bu2K3xWs7OjcVy3Z8HmWnXj130pdz93jCNks3L843y/c9Jq6Vzv0xzj8jcDftk49J8yVlZIKN/39dKX3FRXg8owtvX7ZM2Xco3tOo6uLks/mibDDi7rUmKumS0biCnX9vFWO116neFHF6RQHwScH+P4rOWrFUyE6hb55D1vE/mdrJtJJAKBKgsp0Ivs42pQUC1thRoLZTgXTnF0jK7sdVaKI9wqjTjGmHHnNjSSuO+OG98T/l+Tq589MKaMIqlO0dw971Oal2psNadK9qnidcu3C3b1xbJko+3CWSAgbuNUJ7xCee+enuz9B2eJYNHVuzGjTA4tX6Hy5tU4fbvjP06qRrJxpAACZAACZAACVSXAJXl6pJjPhIggZgRgBKM9cp2ZU+V5NNtVmcolpUpf8edny3/fH61kdVtcPlxVLXdMLeiH6k8TI1Wh+sv3tgk5/66p1GWoSS72+e+R15M1V46O9fkKdx9QEbd3isk37pFe2Tc5OO0KMv/7/TNctLojtY9L0ggWQjQAp0sPcl2kAAJkEDtEaCyXHtsKZkESKCWCGxfu0+u+EO/SqVD+cXa3DXf7Ja+p3hbcqFcY0o0lFC3svzB06vMGl4tCEdUwRpdU7dzQ5FD0a9Mnh7/BEX4l08OqCy5afM//rjCspZDUV49f5dcNfEn8tpd35r8eLnQtlv5ecvrF+8x15uXlSvm4IsXEniRsH/fQcF0cC8rd6UVYQISqBIBmverhIuJE4iAjm31E6jqrCoJpDiBtJycnLAICgsLBQdMV+ZwGLQfF7S8oqIiiVR/rVPQ5QYtj+3QnnL6HFdOHnrnl4umTzYfR0U1bVFfvnxzk9W0b94vf45B+VMLs0bCiguraffjWlhHLmmc+if8T0d54/dLBZZou+t9citplFGxg7Uql/Y01bmGdVcV4Mrye1mKNU9p8cGQ9mr7MT0bZyTjJQEsw27rsN0C/59X18t1fx5s8Vn2ea6x3CNvuJcMWodk8wsKKiz5hw4dkqCf90HLS5b/H7EYR7Qsx4I6y6wuAfezyUtO0M+XoOUly/OK7fAafSJ+f5/G67gqLS3fMNXdurTs7Gx3mHWfm5srWVlZ1n2ki0hyNF/Q8oqLiyUW5bId2qNOn/3h5GG/i8U4tZefTNeYem2ffq3Ks64BtiuBaDeURyiOkTaogryls3fIR5Oc567C0uy2NleHJeqmSq/Wt0HjNFO3o3+Sacqwb97ltwzIsLcXLw3s937kgA8s5soHLwxg+fbeHMyPxMROk5FRsZt6u3btJOjnfdDykuW5m9ijhrUngdon4H42eZUY9PMlaHnJ8rxiO7xGX3lYLH7vBtUfeXnlp4+4W8dp2G4ivCcBEkgYAlhPi+nF2FVaLaruyuv6Zne4+x7nE78wdoEJVsXbnaa693YF9ut3NsvPxnU3yinCUe+//7/lZsrzcRe0t+3KHVoapkOvmrcrxEpsT1nVKdOoAxRkTDnP21IsRXsOCCztdCSQqAT8Woz9pktUDqx3bAjouFI/NrVgqSRAAkERqBuUIMohARIggWgRwIZVf719iVlP67WGFwojlL/nr50vWH/bY2jlG3fBgjz0wvAzbextg3wc5YQPrLl5myruYTn2cqgz6gNF1G6thrKKjbWwbnrS9d+YqdPu/HqW8rz3thhFWaeLr5y7y51UMDW7qg71Of6iDkZRxosCWNnBV8upqjymJ4FUILBtW+h33SusNljs27cvrNhFixY54lavXu2497pBGnfd/eSzy5ozZ479NqrX7rq7C582bZo7SNycQhIwgARIgAREhJZlDgMSSBoCqbFxCKzJ2HQKG3zp1GF3F2IzKmzEBYUPymlGqwaOJL94pL/nmmFMPf7pJR094+wCIB8yvJxOt9Y4KLrfzNxqNsyCRdmuKGsa1A/W8ekTlgnWD7vXCSO+66Dmpk14CVBcWGbSQ2lHG1t1aCztejaVM6/vZkQqo2ZtG1pT1hGG46awXtpeR3v9Rt9/rLWRF9Y7q8XbbhnXOieHb//O2K+To3VsRe0RgPIF5fD//u//rEKgXI4dO1Y+++wzEwaFtkmT8k30rESVXLzwwgvSsaNzZsf3338vxx57rJUTa1ffe+89+ctf/uIp/7bbbrPqgEzvvPOOdOrUSa688kpLhvvi5ZdfNkGPPfaYFYW2vPTSS9KjRw8rLNwFlNWbbrpJUP9TTjklXDJH+A033CC33367Qz4YanmQiaUQ6iB748aNYq+jxv3mN7+RRx55xMqr4eqDl7v98+bNkxUrVoSEax76JEACJAACVJY5DkiABBKCAKyc+/f9GHEKcsMmzkeal9UZjbUri+7GR4qzp60sHRTZ7z7dIagTplf7UTihrIezTOsaYliAdWdq+Ggj2Gz4Nt+cPY1p3nDpzes7ysQGX83aNJT9ReW7W29alm/yYT13/9PbONIiPxT2zKwGoucv29vOaxJIBgLVnSYLJXjy5MnSqlUrgcK3e/duadGifPZKz5495dJLL5WuXbvKunXr5O6775ZBgwb5xnXjjTc60sL6+f7778tdd93lCL/iiivMvbZh+/btZjM6bJwDt2rVKiv9nj17jAIO5f7BBx80Cr4qpJoIiuPs2bNF5SEc7evevbsjTNO7fcidOHGizJ07V4YPH+6Otu7BTus2YMAAo8ifeeaZ8sknn5g2QkE/++yzTfpXX33VKN8qD/V7+OGHDQ+8MOjVq5fFFmsNUVe0//nnnw/hhf7QtqnFfOjQoTJ//nxZuHChUZq/++47T0XcqjwvSIAEUpKA85dlSiJgo0kgmQkkj7Ws2+DmRzrKu02njzk6Yny0e7l150ZSUSeU7l1vd70Gj2wbMS3kumWBTQUfu0RnmX1PaWVFQk55WRrkTIvQDr2byujf9wkpT3PQJ4F4JBA6koOt5f/7f//PKJZQ/MaMGSPTp0+XDz74QNq3b2+Ut9GjR8v48eOlbVt8l8sdFDQo1lAE7YovlGNYgu3KK+Tig/xQ5hCvThU9e3rEIa2WByXXHt+8eXNLsYTC6XaQCcURDtfvvvuuo44I//zzz8MqwWg73HnnnWc+aNOLL75owtx/YGlH2+BrmWgjFGY41F35rF+/3rNMcB4yZIicfvrpRplevny5kaVsVBbkoR7YoRdl4MUFHCzTUOxRDl5koL5Q9t2WZ5O4Bn9qexzWoGrMSgIkUAUCXLNcBVhMSgIkQAIkQAIkEOcEoKVU9kGSw4er/MHU4EcffdRYI7du3SoXXnihuYalEwogrKYIe+CBBxyyEb9jxw6BtRTWTy175cqVgji9h48wWI4h67jjjjNxuMYH06X//e9/O9Lb8+J6586dJq3mgWXZncZ+/+STT0qzZs1MGntd0MuYbo7pz+72aH5YZdUCrGHXX3+94IUBytcwu3/yyScb6/bAgQMFn7feesso90gDBx/l/va3v7Xy4/6ZZ56xLN1t2rQxSi9kLV68WM455xxBO2BdhkwtDy8o7rzzTqNMo9/wQRx2lka7cI22Q57mqYnv+GboGHQE8oYESCDRCNCynGg9xvqSAAmQAAmQAAnEhIBab5s2bWoUPLXgwlKpU6MRhmnaboejOFu3bm3W6YazvNrzqOx77rnHWLBxD8VOLbL2tPZrlKF5EY48lTlM94ZlFtOhcf3GG28YpVvbpOuw7XKQDmuOYZXFtd1h2vNFF10kffv2ldNOO81Yb+3xsHajPLx8QH61OGuaTZs2WTwRhvsZM2aYNctoD6a7w5INKzVeBuiLCqTFlHTtJ5WnPtqFvuvQoYNs2bLFWJj79+9vZgbAQg6FG7LoSIAESEAJUFlWEvRJgARIgARIgAQSnkC5fbJ2m7FgwQKj6OkGVLDmQmGEIgbLMRRWLwfr6BlnnBFRoXPnw9pnu/Lrjnffa100fO/evXoZ4kNph4J47bXXmjidwgwlGcppOAfFEu3EBmfw4f7+978LFM9jjjnGrNvGFHVwwjRodXipgPpAwZ06darxoTjDcgyHuns5TJkGX8i6+eab5fXXXzfT32HFxlRqTLOGQ72gBLvXfqM8KMqYvq0sR4wYITNnzrSUYyjfNXFQ3OF0/KlfE5nMSwIkEHsCabrGw6sqJSUljoecVxqEFRUVCQ6ErswFLQ8PzUj11/oEXW7Q8tgO7Smnz3Hl5KF3frloevokQAL+CezaVXEcF378Bv28D1pesvz/8N9D8ZESiiSmRKsVEsqxfSMvWFO9HCyew4YNk1tuucVMP/ZK4w5btmyZOyiQe1hgYWHVNkCJdFuItSC7Eot8XoolrNJQlO0cVDFVOVB6dc2yhuF3nKa77LLLTPA111xj1hur0ot6YXo6FG1s8oVN1GDtVss34rF23F0vKMjY2AxTwu3WfIQff/zxVttRKBRtd36tox//D3/4g0m2K2+HtGzVxk+WKqVxP5u8Mgf9fAlaXrI8r9gOr9GX+PogxruXS9MHlFdkbm6uYNpQZS4nJ0eysys/nzRoefYHbKQ6Bl1u0PLYDu/e47iqGRfv3AwlARKIRKBly5ZWNKyGQT/vg5aXLP8/LOgJcAFlEcojphDDwbKq1lxYluGw+ZRuImUCbH9gyT3hhBPMplm24LCXmMpsd1Aa7QqpPQ7XbsUdSqw6KImq0EJxr0w5xPjChl92Z5/ibFeuociibnBYz/3f//7XrBG258U1dqtGWp0eDhlY562KL9KgDCjDqixj2jUcpmPrBmC4R/3gtFzIAndswobft1CUwRsKtr0tH3/8sdlsDWlxDcVZ61MZE1Ogx5+RI0cKdtR+47VJct1N2EzMeWShR5YqBbmfTV6Zg36+BC0vWZ5XbIfX6BNJ9N/t4Qy/nIbt3d8MJQESIAESIAESSGIC2MipOg6bQd16661mMylYSX/3u9+ZlyrYWMruoIRhcym7Q5np6ely1VVXyXPPPWdFueuCdckIwy7UXbp0MRZfyO/Tp49Rdu3pscEVfqSqgyKN46bsDvH4QNmEouquK+TZZeo9NszC2uOrr77avBywK8p2+bjWPLjGjtWw/tpl2tMjTuvw+OOPW22yy8D0bCi/SAdm6lQmfNQHlnGdCo60b775pkmKeGziBYdrtAX9AQsyzrJW5Rz9hDOa1al8vffr43xp7LSdv3e3vPnaJDnv0jvkqLR6frMzHQmQQJwSoLIcpx3DapFAMASq92MwmLIphQRIgASiT6C6yk5VaqrWR6z1xZFEUJLsDtZnHIMUzkFpg/UZlju3g8KniiSssFjnDIUQG31B0YVl2O7s6RH+1FNPmbXA2PkZDmt4cbwSytR62/OHux48eLCJ0hmIKF9lah6tJ+5hwcbZx/YwTefXx3nJUGZRX0yd9pKF+FNPPdWI1CnkfuUjHWZC4lxp5YkXH0G6Y3r1l5UrvpNP//lXOfO864IUTVkkQAIxIMCjo2IAnUWSAAmQAAmQAAnElgCU6up+oLBB2ZoyZYoMGDDANASyYOHE1N6f//znMmrUKId8KM/28lRJs4fpNeRg/S4s0LBkw7IK6+fll18uF198sSlb06qPaeHIA7lIq+E4Pglrk/v162cUUQ23+2iA/R7Xd9xxhyMMG42501R2H+74KCirYIgPzlNWOWB07rnnGgu6Hu2kcT/88IO89tprxmqNDb6w4zamWWu8my/CwRE+XjJoOvQXmCDs6KOPlg8//FBuuukmK62mq44Pjhde8ktp07aDrFnxjSya91FsBzlLJwESqDEBWpZrjJACSCB+CdCuHL99w5qRAAkkHgFMi4bS1rt3b8fUXW0JLJ2w4Nqn+SIOFlKdHqxpoRTiY3dYCzl79myzuerTTz8dcgTS8OHD5ZVXXjGKrD0fFD6sEYby7mVt1SnHUPDdZcIKrg7r9DH1GUq528Hqq2s1sfZ56dKljiRQpjds2GCt/UUkwlq0aCGTJk1ypMVO1GqxRoT9GvfuOiIMbcBu1rpWHC8E0B/jxo2T3bt3C+qHncahNE+YMMHIxDR59Ic65btx40a5//77Lb7gh3XTOMO6pi4trZ5c/oubZOrkP8m8L96rqTjmJwESiDEBKssx7gAWTwKBEaBmHBhKCkpBAvz+pFynw3JYVXfyyScLPnD2/FDY7PdQNu33fsuBojt27FgruZcMWEYx5dkeh82l8HHXyxIkYhRgTF+250M8LNdQfhGu1/Z87mukQ/u8FGp3Wr23lwmLNZyG2euNHaU1XPPafaw7xgd9gHT2/kA6rN8GQ6RBPNqDqexwULIR5sUXdcCLiEhl2+tR2XWTJhnys1E3ybvTJsqPB8tkZ06BtM7OqCwb40mABOKQAKdhx2GnsEokQAIkQAIkQALVJAAduLJPNUWHy6YKdLh4v+GRNtDyKyNSutqWH6lsP3FuC7OfPPY0sOCHk4G2h4uDDC+LvF12Va9bte4oZ55bvmb5w78skOLC0qqKYHoSIIE4IEDLchx0AqtAArVHoOqWk9qrCyWTAAmQQCQCfF5FosO4xCPQpXv5evaC3cXyj5fmyQnjD8tR/OWdeB3JGqc0AX5lU7r72XgSIAESIAESSC4CflXuoKbcJhc9tqamBHT8qQ95PQe2l1WLt8qCV9Pk+DHBnr9c0/oyPwmQQGQCaV7HFmiWgoICvYzoY7fBSHI0c9DySkpKYlIu26E96vTZH04eeher74eWT58ESMA/gaKiIisx/q8F/bwPWl6yPHct6EFc2LWUIORRBglUhYCOP/VF5MwrBkjB7hLZtnSPLP+gjvQ5r35VJJq07meTl4Cgny9By0uW5xXb4TX6xOwon8j64IEDBzwblpaVleUZoYGVxSNdWVmZ+EmHtH7S+ZWXn5/vS17Q5QYtj+0A0VDndxwgJ8dVKD+GkAAJVJ0AjuhRp88V9TXcy+fzyotK1X4feEuovVBalmuPLSU7CRyVVldGjR0qr/3xX7Lq0zLJyK4rHQZWbXKn17PJWUr5HZ9XXlT4O9GLCvUPJxXdad8ZKsINvtxEeE8CCUsAr7Htn4RtCCtOAjEgYDMDxaB0FkkCJJDcBBo0qicn3tBQ6jWqI4unlcrujYeSu8FsHQkkCYGqvdZKkkazGSRAAiRAAiRAAqlNgJbl1O7/WLS+aVZdGXJ1A5n7f/tl/sv7Zfj4RtK4RZ1YVIVlkgAJ+CRAZdknKCYjARKIDYG/T/hBWmQ3kt05JXLp73tXqxI7NxbLrD+vkZYdGpn8543vUS05Hzy92uQrKTwop17dWVp3blwtOUG0adGs7bJ24R5p1DRN2vdsKoNGtq1WXYJqU7UKZyYSIAESSDECbXodJf0urC9LZxyQeVP3y7Cby63NKYaBzSWBhCFAZTlhuooVJYGqE0h0y8lX07fIWTd2lYxW9Y1iuHl5gXTo3bTKIP7zyka5+ol+Jt+Hz6yR6nDZualY2vVoYimls6dukBFjjq5yXYJq09ZVhXLJfb1M+W9PWCEDz2lT5boE1aYqF8wMJOBBIKiJ8NX5fntUh0EkUE0C5SPZaxzqGO96Sj0pzD0sG74qk29eLTXTs6tZGLORAAnUMgEqy7UMmOJJgASqT6BhkzTZubHIKMv5O0olq0v1HlmNMtLkQPGPUr/xUVJScLBaFWrQOE32bt9v8hbkee+Y6EdwUG2qbjvsdQyqTXaZvCaBRCHgpcwkSt1Zz8Qn0O+i+rIv95DkrvhRvp9xQI69sOo7ZCc+BbaABOKfQPV+ecZ/u1hDEiCBJCCAqcWwBK/4cpeZblzdqcbn3tJdYH2F63NKq2qRgXW7WduGRg6Ub8isjguqTSdckm216ZRrOlWnKuYlRBBtqlbhzEQCJEACKUygbprI0DEN5POn98vaOWXSJKuOHP3TeilMhE0ngfgkQGU5PvuFtSIBEjhCoLpKqRvgJb8vn7LsDq/KPRTd6irs9nKCaBOmo8dTm+zt4zUJxDuB+g0ay6hRo+K9mqxfghFo2LB8Xwy/1cbO2Ngh+z9PlsjS9w5Ik6y60qr7UX6zMx0JkEAUCFBZjgJkFkECUSGgi6GiUhgLIYEkIGD/ztivk6BpqdwEP135y3F/MohaZlR/SUUqM2bbwxPQ8ad++JTlMdgNGxZms0P21FI59XbukF0ZM8aTQDQJpOXk5IQtr7CwUMrKysLGawQOtfbjgpZXVFQkkeqvdQq63KDlsR3aU06f48rJQ+/8ctH09EmABPwTKCgosBIfOnRIgn7eBy0vWf5/WNCDuPCrpaCswzi2pyoZgqggZSQ/gTpVGlawJmMN87d/P2CU5uHjQ3fIdj+bvBgG/XwJWl6yPK/YDq/RJ+L392m8jqvS0lLPhqVlZ2d7RiAwNzdXsrKywsbbIyLJ0XRByysuLpZYlMt2aI86ffaHk4f9Lhbj1F4+r0mABPwRyMjIsBK2a9eO/wctGs6LoP8PlkuPvtK6q4BrRJ09y7vaIaBjW/3QUo7+aZrsyz1s1i/Pn4odshsI1jWrcz+bNNzuB/29DFoefyfae8t5HYvfiewPZx/k5eU5A47c2b6GnvEMJAESSGgC4f8xJ3SzWHkSIAESCEOAT70wYBgc9wSOvbCeFO4o3yEba5h/cil3yI77TmMFk55A3aRvIRtIAiRAAiRAAiRAAiRAAglAYMjV9SUzu65s+OqgsTInQJVZRRJIagK0LCd197JxqU6AFpZUHwFsPwmQAAmQQCIRwA7ZeqTU9zPKpGkb2rUSqf9Y1+QjwG9g8vUpW0QCJEACJEACJEACJJCgBLBD9vHXlq9ZXvAqd2xP0G5kGxjolAAAIABJREFUtZOEAC3LSdKRbAYJpDqBvE3F0qpT44TDUJh3QJq2qvq6NL/tXbdwr3Qd3CyEi9/8IRkZQAJxTuDwYc6pifMuYvV8EGjeua4MurK+qLKMzZgaN068/3E+msokJBDXBGhZjuvuYeVIoKYE8KMx+T+FeaXyl/HfSc4POPbH2d7ZUzfIC9ctCgl3pwviHuVX5fP2hBXy4thFIfXO21Rk6nyg+GDYev/nlU3y2h1Lw8Zrez5+YZ0snrU9JF1Gq/qmDJSlaVPLr+l3i/lJgARIoHYJZA9Mkx6nl+/YPnHiRF/HudZujSidBFKPAC3LqdfnbDEJJB2BGRNXSZeB5dbTn
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Python Scrapy实现的网易云音乐music163数据爬取爬虫系统 含全部源代码 基于Scrapy框架的网易云音乐爬虫,大致爬虫流程如下: - 以歌手页为索引页,抓取到全部歌手; - 从全部歌手页抓取到全部专辑; - 通过所有专辑抓取到所有歌曲; - 最后抓取歌曲的精彩评论。 数据保存到`Mongodb`数据库,保存歌曲的歌手,歌名,专辑,和热评的作者,赞数,以及作者头像url。 抓取评论者的头像url,是因为如果大家喜欢,可以将他做web端。 ### 运行: ``` $ scrapy crawl music ``` #!/usr/bin/python #-*-coding:utf-8-*- import time from pprint import pprint from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector from scrapy.http import Request from woaidu_crawler.items import WoaiduCrawlerItem from woaidu_crawler.utils.select_result import list_first_item,strip_null,deduplication,clean_url class WoaiduSpider(BaseSpider): name = "woaidu" start_urls = ( 'http://www.woaidu.org/sitemap_1.html', ) def parse(self,response): response_selector = HtmlXPathSelector(response) next_link = list_first_item(response_selector.select(u'//div[@class="k2"]/div/a[text()="下一页"]/@href').extract()) if next_link: next_link = clean_url(response.url,next_link,response.encoding) yield Request(url=next_link, callback=self.parse) for detail_link in response_selector.select(u'//div[contains(@class,"sousuolist")]/a/@href').extract(): if detail_link: detail_link = clean_url(response.url,detail_link,response.encoding) yield Request(url=detail_link, callback=self.parse_detail) def parse_detail(self, response): woaidu_item = WoaiduCrawlerItem() response_selector = HtmlXPathSelector(response) woaidu_item['book_name'] = list_first_item(response_selector.select('//div[@class="zizida"][1]/text()').extract()) woaidu_item['author'] = [list_first_item(response_selector.select('//div[@class="xiaoxiao"][1]/text()').extract())[5:].strip(),] woaidu_item['book_description'] = list_first_item(response_selector.select('//div[@class="lili"][1]/text()').extract()).strip() woaidu_item['book_covor_image_url'] = list

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值