<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Scrapy on 搁浅St的blog</title>
        <link>https://blog.huirongis.me/tags/scrapy/</link>
        <description>Recent content in Scrapy on 搁浅St的blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Sun, 08 Nov 2026 16:13:21 +0000</lastBuildDate><atom:link href="https://blog.huirongis.me/tags/scrapy/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>ubuntu下使用scrapy抓取cnblogs</title>
        <link>https://blog.huirongis.me/post/ubuntu-scrapy-stackoverflow/</link>
        <pubDate>Sun, 26 Apr 2015 16:52:28 +0000</pubDate>
        
        <guid>https://blog.huirongis.me/post/ubuntu-scrapy-stackoverflow/</guid>
        <description>&lt;p&gt;今天在伯乐在线上看到一篇翻译的博客，讲的是使用scrapy来抓取stackoverflow上的问题，刚好好久没用这个，于是一并捡起来玩一下。&lt;/p&gt;
&lt;h1 id=&#34;软件安装&#34;&gt;软件安装
&lt;/h1&gt;&lt;p&gt;我的环境是：ubuntu 14.04 lts
需要安装相关软件&lt;/p&gt;
&lt;h2 id=&#34;scrapy&#34;&gt;scrapy
&lt;/h2&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pip install Scrapy
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pymongo&#34;&gt;PyMongo
&lt;/h2&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pip install pymongo
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mongodb&#34;&gt;Mongodb
&lt;/h2&gt;&lt;p&gt;上面安装的是python使用Mongodb的接口，很显然，我们要安装Mongodb才能使用&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install mongodb-server
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;至此，要使用的软件都已经安装完毕&lt;/p&gt;
&lt;h1 id=&#34;使用scrapy新建工程&#34;&gt;使用scrapy新建工程
&lt;/h1&gt;&lt;p&gt;使用scrapy新建工程很简单，如下所示，我们新建一个stack的项目，他会在你的当前目录新建一个stack文件夹&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;scrapy startproject stack
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;并且会建成如下所示的目录树结构&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chen@chen-P31:~$ tree stack
stack
├── stack
│   ├── __init__.py
│   ├── items.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       └── __init__.py
└── scrapy.cfg
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;接下来，我们修改items.py的内容，这个文件用于定义存储“容器”，用来存储将要抓取的数据。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; scrapy.item &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Item,Field
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;StackItem&lt;/span&gt;(Item):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# define the fields for your item here like:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# name = scrapy.Field()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    title &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Field()&lt;span style=&#34;color:#75715e&#34;&gt;# 我们添加两个字段，我们等会儿会抓取一个标题和url两个字段&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Field()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接着，还有一个很重要的东西，对，就是我们的蜘蛛，我们在spider目录下，新建一个stack_spider.py文件。顾名思义，这就是我们的蜘蛛。我们需要定义我们爬虫的起点，爬虫的规则等等&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; scrapy &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Spider
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; stack.items &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; StackItem  &lt;span style=&#34;color:#75715e&#34;&gt;# 导入我们上面定义的容器类&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;StackSpider&lt;/span&gt;(Spider):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;stack&amp;#39;&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;# 定义我们爬虫的名字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    allowed_domains &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cnblogs.com&amp;#34;&lt;/span&gt;]   &lt;span style=&#34;color:#75715e&#34;&gt;# 规定爬虫爬取的域名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    start_urls &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;http://www.cnblogs.com/geqianst/p/&amp;#39;&lt;/span&gt;,]   &lt;span style=&#34;color:#75715e&#34;&gt;# 爬虫工作的起点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(self, response):&lt;span style=&#34;color:#75715e&#34;&gt;# 爬虫用来做数据解析的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        questions &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;xpath(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# xpath选择器，这里的含义是取所有id为myposts的div，在它下面找所有带id的超链接a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# 实际结果是这样的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# [&amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_0&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_1&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_2&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_3&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_4&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_5&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_6&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_7&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_8&amp;#34; hr&amp;#39;&amp;gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;Selector xpath=&amp;#39;//div[@id=&amp;#34;myposts&amp;#34;]//a[@id]&amp;#39; data=u&amp;#39;&amp;lt;a id=&amp;#34;PostsList1_rpPosts_TitleUrl_9&amp;#34; hr&amp;#39;&amp;gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; question &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; questions:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            item &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; StackItem()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            item[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; question&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;xpath(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;text()&amp;#39;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;extract()[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            item[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; question&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;xpath(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;@href&amp;#39;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;extract()[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            print item
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;yield&lt;/span&gt; item
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;测试&#34;&gt;测试
&lt;/h1&gt;&lt;p&gt;ok，上述工作基本完成，我们来测试一下&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scrapy crawl stack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;还可以这样测试一下，使用shell命令
&lt;img src=&#34;https://blog.huirongis.me/images/692869a3gw1erjvd7qeqdj213z0j9h2h.jpg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;用shell测试xpath&#34;
	
	
&gt;
妈蛋，我的竟然出错了，输出如下&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chen@chen-P31:~/stack$ scrapy crawl stack
2015-04-26 16:49:11+0800 [scrapy] INFO: Scrapy 0.24.6 started (bot: stack)
2015-04-26 16:49:11+0800 [scrapy] INFO: Optional features available: ssl, http11
2015-04-26 16:49:11+0800 [scrapy] INFO: Overridden settings: {&amp;#39;NEWSPIDER_MODULE&amp;#39;: &amp;#39;stack.spiders&amp;#39;, &amp;#39;SPIDER_MODULES&amp;#39;: [&amp;#39;stack.spiders&amp;#39;], &amp;#39;BOT_NAME&amp;#39;: &amp;#39;stack&amp;#39;}
Traceback (most recent call last):
  File &amp;#34;/usr/local/bin/scrapy&amp;#34;, line 11, in &amp;lt;module&amp;gt;
    sys.exit(execute())
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py&amp;#34;, line 143, in execute
    _run_print_help(parser, _run_command, cmd, args, opts)
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py&amp;#34;, line 89, in _run_print_help
    func(*a, **kw)
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py&amp;#34;, line 150, in _run_command
    cmd.run(args, opts)
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/commands/crawl.py&amp;#34;, line 60, in run
    self.crawler_process.start()
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py&amp;#34;, line 92, in start
    if self.start_crawling():
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py&amp;#34;, line 124, in start_crawling
    return self._start_crawler() is not None
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py&amp;#34;, line 139, in _start_crawler
    crawler.configure()
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py&amp;#34;, line 46, in configure
    self.extensions = ExtensionManager.from_crawler(self)
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/middleware.py&amp;#34;, line 50, in from_crawler
    return cls.from_settings(crawler.settings, crawler)
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/middleware.py&amp;#34;, line 29, in from_settings
    mwcls = load_object(clspath)
  File &amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/utils/misc.py&amp;#34;, line 42, in load_object
    raise ImportError(&amp;#34;Error loading object &amp;#39;%s&amp;#39;: %s&amp;#34; % (path, e))
ImportError: Error loading object &amp;#39;scrapy.telnet.TelnetConsole&amp;#39;: No module named conch
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这是什么gui？
还好我有stackoverflow，google一番，找到解决办法（其实这不是最后的解决办法，请往后看）
网上说是twisted的问题，重新安装一下就好了，ok，走起&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chen@chen-P31:~/stack$ sudo apt-get install twisted
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package twisted
chen@chen-P31:~/stack$ sudo apt-get install twisted.conch
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting &amp;#39;python-twisted-conch&amp;#39; for regex &amp;#39;twisted.conch&amp;#39;
Note, selecting &amp;#39;python2.7-twisted-conch&amp;#39; for regex &amp;#39;twisted.conch&amp;#39;
Note, selecting &amp;#39;python-twisted-conch&amp;#39; instead of &amp;#39;python2.7-twisted-conch&amp;#39;
The following packages were automatically installed and are no longer required:
  cli-common dockmanager freepats gstreamer1.0-plugins-bad-faad
  gstreamer1.0-plugins-bad-videoparsers libbotan-1.10-0:i386 libcdaudio1
  libdbus-glib2.0-cil libdbus2.0-cil libdbusmenu-glib4:i386
  libdbusmenu-gtk4:i386 libegl1-mesa:i386 libegl1-mesa-drivers:i386 libflite1
  libfluidsynth1 libgbm1:i386 libgconf2.0-cil libgdiplus libgif4
  libgles2-mesa:i386 libglib2.0-cil libgme0 libgmp10:i386
  libgnome-desktop-2-17 libgnome-keyring1.0-cil libgnomedesktop2.20-cil
  libgstreamer-plugins-bad0.10-0 libgstreamer-plugins-bad1.0-0 libgtk2.0-cil
  libicu52:i386 libmimic0 libmms0 libmono-addins0.2-cil libmono-cairo4.0-cil
  libmono-corlib4.0-cil libmono-corlib4.5-cil libmono-data-tds4.0-cil
  libmono-i18n-west4.0-cil libmono-i18n4.0-cil libmono-posix4.0-cil
  libmono-security4.0-cil libmono-sharpzip4.84-cil libmono-sqlite4.0-cil
  libmono-system-configuration4.0-cil libmono-system-core4.0-cil
  libmono-system-data4.0-cil libmono-system-drawing4.0-cil
  libmono-system-enterpriseservices4.0-cil
  libmono-system-runtime-serialization-formatters-soap4.0-cil
  libmono-system-security4.0-cil libmono-system-transactions4.0-cil
  libmono-system-web-applicationservices4.0-cil
  libmono-system-web-services4.0-cil libmono-system-web4.0-cil
  libmono-system-xml-linq4.0-cil libmono-system-xml4.0-cil
  libmono-system4.0-cil libmono-web4.0-cil libmpg123-0 libnotify0.4-cil
  libofa0 libopenal-data libopenal1 libopenvg1-mesa:i386 libqrencode3:i386
  libqt5core5a:i386 libqt5dbus5:i386 libqt5gui5:i386 libqt5network5:i386
  libqt5widgets5:i386 libqtshadowsocks:i386 librsvg2-2.18-cil libslv2-9
  libsoundtouch0 libspandsp2 libsrtp0 libssl1.0.0:i386 libv4l-0:i386
  libv4lconvert0:i386 libvo-aacenc0 libvo-amrwbenc0 libwayland-client0:i386
  libwayland-egl1-mesa:i386 libwayland-server0:i386 libwildmidi-config
  libwildmidi1 libwnck2.20-cil libxcb-icccm4:i386 libxcb-image0:i386
  libxcb-keysyms1:i386 libxcb-randr0:i386 libxcb-render-util0:i386
  libxcb-shape0:i386 libxcb-util0:i386 libxcb-xfixes0:i386 libxcb-xkb1:i386
  libxkbcommon-x11-0:i386 libxkbcommon0:i386 libzbar0:i386 mono-4.0-gac
  mono-gac mono-runtime mono-runtime-common mono-runtime-sgen python-mpd
  python-mutagen python-twisted-names
Use &amp;#39;apt-get autoremove&amp;#39; to remove them.
The following extra packages will be installed:
  python-pyasn1
The following NEW packages will be installed:
  python-pyasn1 python-twisted-conch
0 upgraded, 2 newly installed, 0 to remove and 6 not upgraded.
Need to get 286 kB of archives.
After this operation, 1,793 kB of additional disk space will be used.
Do you want to continue? [Y/n] 
Get:1 http://mirrors.ustc.edu.cn/ubuntu/ trusty/main python-pyasn1 all 0.1.7-1ubuntu2 [44.2 kB]
Get:2 http://mirrors.ustc.edu.cn/ubuntu/ trusty/main python-twisted-conch all 1:13.2.0-1ubuntu1 [242 kB]
Fetched 286 kB in 0s (1,595 kB/s)         
Selecting previously unselected package python-pyasn1.
(Reading database ... 359746 files and directories currently installed.)
Preparing to unpack .../python-pyasn1_0.1.7-1ubuntu2_all.deb ...
Unpacking python-pyasn1 (0.1.7-1ubuntu2) ...
Selecting previously unselected package python-twisted-conch.
Preparing to unpack .../python-twisted-conch_1%3a13.2.0-1ubuntu1_all.deb ...
Unpacking python-twisted-conch (1:13.2.0-1ubuntu1) ...
Processing triggers for doc-base (0.10.5) ...
Processing 1 added doc-base file...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up python-pyasn1 (0.1.7-1ubuntu2) ...
Setting up python-twisted-conch (1:13.2.0-1ubuntu1) ...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;安装总算完成，再试一次，妈蛋，又来一个新错误，这是什么gui？？？&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chen@chen-P31:~/stack$ scrapy crawl stack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2015-04-26 16:50:44+0800 &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;scrapy&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; INFO: Scrapy 0.24.6 started &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;bot: stack&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2015-04-26 16:50:44+0800 &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;scrapy&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; INFO: Optional features available: ssl, http11
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2015-04-26 16:50:44+0800 &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;scrapy&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; INFO: Overridden settings: &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;NEWSPIDER_MODULE&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;stack.spiders&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;SPIDER_MODULES&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;stack.spiders&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;BOT_NAME&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;stack&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Traceback &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;most recent call last&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/bin/scrapy&amp;#34;&lt;/span&gt;, line 11, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sys.exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;execute&lt;span style=&#34;color:#f92672&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py&amp;#34;&lt;/span&gt;, line 143, in execute
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    _run_print_help&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;parser, _run_command, cmd, args, opts&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py&amp;#34;&lt;/span&gt;, line 89, in _run_print_help
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    func&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;*a, **kw&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py&amp;#34;&lt;/span&gt;, line 150, in _run_command
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cmd.run&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;args, opts&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/commands/crawl.py&amp;#34;&lt;/span&gt;, line 60, in run
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    self.crawler_process.start&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py&amp;#34;&lt;/span&gt;, line 92, in start
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; self.start_crawling&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py&amp;#34;&lt;/span&gt;, line 124, in start_crawling
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self._start_crawler&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; is not None
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py&amp;#34;&lt;/span&gt;, line 139, in _start_crawler
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crawler.configure&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py&amp;#34;&lt;/span&gt;, line 46, in configure
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    self.extensions &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ExtensionManager.from_crawler&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/middleware.py&amp;#34;&lt;/span&gt;, line 50, in from_crawler
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; cls.from_settings&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;crawler.settings, crawler&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/middleware.py&amp;#34;&lt;/span&gt;, line 29, in from_settings
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mwcls &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; load_object&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;clspath&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/local/lib/python2.7/dist-packages/scrapy/utils/misc.py&amp;#34;&lt;/span&gt;, line 42, in load_object
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    raise ImportError&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error loading object &amp;#39;%s&amp;#39;: %s&amp;#34;&lt;/span&gt; % &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;path, e&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ImportError: Error loading object &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;scrapy.contrib.memusage.MemoryUsage&amp;#39;&lt;/span&gt;: No module named mail.smtp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最后的最后，我在我们万能的github上找到&lt;a class=&#34;link&#34; href=&#34;https://github.com/scrapy/scrapy/issues/958&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;答案&lt;/a&gt;，原来是我们没有安装python-twisted，安装一下，世界都美好了&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install python-twisted
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;输出到文件&#34;&gt;输出到文件
&lt;/h2&gt;&lt;p&gt;为了更直观的看到结果，我们将结果输出到一个json文件&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;scrapy crawl stack -o items.json -t json
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;噢耶，第一个爬虫成功&lt;/p&gt;
&lt;h1 id=&#34;存储到mongodb&#34;&gt;存储到mongodb
&lt;/h1&gt;&lt;p&gt;接下来，我们做最后一件事，我们将结果存储到mongodb的数据库中
在这里，我遇到一个大坑，无论是伯乐在线翻译的博客
还是网上搜索到的一般教程，都是使用pymongo.Connection来连接数据库，可是妈蛋，你使用&lt;code&gt;pip install pymongo&lt;/code&gt;安装的版本都是最新版本3.0.1，那个Connection的写法已经不支持，被丢弃了，擦。
我们来看一下版本，我学到一个新命令&lt;code&gt;pip show pymongo&lt;/code&gt;，用来查看某一个包的版本的。
&lt;img src=&#34;https://blog.huirongis.me/images/692869a3gw1erjct36jnrj20df038dgf.jpg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;查看pymongo版本&#34;
	
	
&gt;
在pymongo 3.0的版本中，已经不再支持pymongo.Connection，而是使用pymongo.MongoClient来替代。&lt;/p&gt;
&lt;h2 id=&#34;第一步&#34;&gt;第一步
&lt;/h2&gt;&lt;p&gt;创建一个用来保存我们抓取数据的数据库。打开&lt;code&gt;settings.py&lt;/code&gt;,指定管道，然后加入数据库的相关设置&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BOT_NAME &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;stack&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SPIDER_MODULES &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;stack.spiders&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NEWSPIDER_MODULE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;stack.spiders&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Crawl responsibly by identifying yourself (and your website) on the user-agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# USER_AGENT = &amp;#39;stack (+http://www.yourdomain.com)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ITEM_PIPELINES &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;stack.pipelines.MongoDBPipeline&amp;#39;&lt;/span&gt;, ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 关于mongodb的相关设置，包括服务器的ip，端口号，数据库名，表名，&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 我也是第一次使用mongodb竟然不需要用户验证信息，而且这表名确实奇怪，叫做MONGODB_COLLECTION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MONGODB_SERVER &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MONGODB_PORT &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;27017&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MONGODB_DB &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stackoverflow&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MONGODB_COLLECTION &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;questions&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DOWNLOAD_DELAY &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 抓取的延迟&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;第二步&#34;&gt;第二步
&lt;/h2&gt;&lt;p&gt;我们已经能够爬取和解析html数据了，而且已经配置了数据库，接下来，我们通过&lt;code&gt;pipelines.py&lt;/code&gt;中建立一个管道去连接这两个部分。
我们首先来完成数据库的连接部分&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; pymongo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; scrapy.conf &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; settings
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; scrapy.exceptions &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; DropItem
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; scrapy &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; log
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MongoDBPipeline&lt;/span&gt;(object):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;__init__&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        connection &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pymongo&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;MongoClient(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            settings[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;MONGODB_SERVER&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            settings[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;MONGODB_PORT&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        db &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; connection[settings[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;MONGODB_DB&amp;#39;&lt;/span&gt;]]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;collection &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; db[settings[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;MONGODB_COLLECTION&amp;#39;&lt;/span&gt;]]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下来定义一个处理函数&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;process_item&lt;/span&gt;(self, item, spider):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; data &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; item:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; data:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;raise&lt;/span&gt; DropItem(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Missing data!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;collection&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;update({&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;: item[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;]}, dict(item), upsert&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;msg(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Question added to MongoDB database!&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                level&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;DEBUG, spider&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;spider)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; item
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ok,搞定，我们再测试一把&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scrapy crawl stack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;执行效果如下&#34;&gt;执行效果如下
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://blog.huirongis.me/images/692869a3gw1erjv5to5w3j20w70g8wio.jpg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;mongodb数据库管理&#34;
	
	
&gt;&lt;/p&gt;
&lt;h1 id=&#34;参考文献&#34;&gt;参考文献
&lt;/h1&gt;&lt;p&gt;1 &lt;a class=&#34;link&#34; href=&#34;https://github.com/scrapy/scrapy/issues/958&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ImportError: Error loading object &amp;lsquo;scrapy.contrib.memusage.MemoryUsage&amp;rsquo;: No module named mail.smtp&lt;/a&gt;
2 &lt;a class=&#34;link&#34; href=&#34;http://stackoverflow.com/questions/8671071/error-to-execute-python-scrappy-module&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://stackoverflow.com/questions/8671071/error-to-execute-python-scrappy-module&lt;/a&gt;
3 &lt;a class=&#34;link&#34; href=&#34;http://python.jobbole.com/81320/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Python下用Scrapy和MongoDB构建爬虫系统（1）&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
