美文网首页Linux指令
腾讯云服务器+Ubuntu+Scrapy抓取网页数据

腾讯云服务器+Ubuntu+Scrapy抓取网页数据

作者: 狸狸深深 | 来源:发表于2017-05-02 13:46 被阅读415次

    所需工具

    1.搭建服务器环境

    1.1远程连接服务器###

    1.1.1下载安装xshell####

    1.1.2与服务器建立连接####

    • 下载后打开xshell,在工具栏点击【新建文件传输(Ctrl+Alt+F)】,下载xftp,跟着网页所示步骤完成下载即可。


      xftp.PNG
    • 新建连接,按要求输入连接名、主机IP,点击确定。


      connection.PNG
    • 选中新建的连接,点击【连接】。


      conn.PNG
    • 输入服务器用户名。


      conn1.PNG
    • 点击【浏览】→【生成】→【下一步】→填完秘钥名和密码继续【下一步】→【保存成文件】。


      miyao.PNG
    miyao1.PNG miyao2.PNG miyao3.PNG miyao4.PNG
    • 到服务器绑定秘钥


      bang.PNG
    bang1.PNG

    这里要先关闭服务器,再进行绑定。


    bang2.PNG bang3.PNG bang4.PNG

    绑定之后再将服务器开机。

    • 进入xshell,【打开】输入密码。如下图所示,则连接成功。


      conn2.PNG
    connsuccess.PNG

    1.2配置服务器环境###

    1.2.1新增用户####

    输入指令:sudo adduser username

    adduser.PNG
    输入指令:cd /home/username
    sudo usermod -aG sudo username为用户添加sudo权限
    su root提升用户权限:#是系统管理员,$是普通管理员
    sudo.PNG
    更多指令参考Ubuntu 常用命令整理

    1.2.2安装虚拟环境、各种软件包、scrapy####

    此过程详见Linux云服务器下配置Scrapy并抓取数据

    2.创建数据采集项目,抓取网页源码

    这里以抓取Quotes to Scrape名人名言为例。

    • 安装好scrapy后,输入指令scrapy startproject quotes
      创建项目。

    • 本地编写爬虫文件

      import scrapy
      class QuotesSpider(scrapy.Spider):
      name="quotes"
      
      def start_requests(self):
          urls=[
          'http://quotes.toscrape.com/page/1',
           'http://quotes.toscrape.com/page/2',
          ]
          for url in urls:
          yield scrapy.Request(url=url,callback=self.parse)
      
      def parse(self,response):
          page=response.url.split("/")[-2]
          filename='quotes-%s.html'%page
          with open(filename,'wb') as f:
            f.write(response.body)
            self.log('Saved file %s'% filename)
      

    这里需要非常注意,Python语言是一款对缩进非常敏感的语言,所以编写Python代码时要注意缩进,否则就会容易出现在编译时会出现这样的错误IndentationError:expected an indented block。最常见的情况是tab和空格的混用会导致错误。所以该缩进的地方要缩进,而且不能空格与tab混用。

    • 执行爬虫(若未激活)
      输入指令cd /home/example/venv进入虚拟环境
      输入指令source bin/activate激活
      输入指令cd quotes进入刚才新建的项目
      输入指令cd quotes/spiders进入spiders目录
      然后将本地编写好的爬虫拖入spiders目录下(若失败,查看是否有权限#,没有su root提高管理员权限)
      输入指令scrapy crawl quotes执行爬虫
    • 下载爬虫爬取的文件
      输入指令sz 文件名下载(如不知道文件名,可使用tree命令查看当前目录文件,tree安装指令:sudo apt-get install tree

    3.抓取热门标签下的名人名言

    对爬虫还不是非常了解,所以我在这用的是一种比较笨的方法:手动将10个热门标签对应的url放在urls列表里......
    代码如下:

          import scrapy
    
          class QuotesSpider(scrapy.Spider):
          name="hot_quotes"
            start_urls=[
              'http://quotes.toscrape.com/tag/love/',
              'http://quotes.toscrape.com/tag/inspirational/',
              'http://quotes.toscrape.com/tag/life/',
              'http://quotes.toscrape.com/tag/humor/',
              'http://quotes.toscrape.com/tag/books/',
              'http://quotes.toscrape.com/tag/reading/',
              'http://quotes.toscrape.com/tag/friendship/',
              'http://quotes.toscrape.com/tag/friends/',
              'http://quotes.toscrape.com/tag/truth/',
              'http://quotes.toscrape.com/tag/simile/',
            ]
    
            def parse(self,response):
              for quote in response.css('div.quote'):
                yield {
                  'text':quote.css('span.text::text').extract_first(),
                  'author':quote.css('small.author::text').extract_first(),
                  'tags':quote.css('div.tags a.tag::text').extract(),
            }
    
            next_page=response.css('li.next a::attr(href)').extract_first()
            if next_page is not None:
              next_page=response.urljoin(next_page)
              yield scrapy.Request(next_page,callback=self.parse)
    

    name是爬虫名字,这个名字必须是唯一的。

    • 执行爬虫:
      过程和2相同,执行指令为scrapy crawl hot_quotes -o hotquotes.json
      第一个参数hot_quotes为爬虫名字,第二个参数hotquotes.json是你想要将爬取下来的数据存为的名字。
    • 下载同2

    4.json与xml互转

    百度线上工具:在线XML、JSON数据互转

    5.经验教训

    • 学习前人的经验:前人的经验可以有效避免走弯路、走错路,大大提高学习效率,本次环境配置参考了㭍葉的过程,节省了很多时间。
    • Python语法:本次运行爬虫程序时,一直出现IndentationError:expected an indented block错误,改了n次还是报错,最后静下心把所有缩进都统一调整,代码中该删的空格都删掉才解决问题。所以以后写Python程序时,要养成良好的习惯,避免这样的低级错误。

    6.参考来源##

    相关文章

      网友评论

        本文标题:腾讯云服务器+Ubuntu+Scrapy抓取网页数据

        本文链接:https://www.haomeiwen.com/subject/dacctxtx.html