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

所需工具

1.搭建服务器环境

1.1远程连接服务器###

1.1.1下载安装xshell####

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

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

    《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 xftp.PNG

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

    《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 connection.PNG

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

    《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 conn.PNG

  • 输入服务器用户名。

    《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 conn1.PNG

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

    《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 miyao.PNG

《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 miyao1.PNG
《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 miyao2.PNG
《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 miyao3.PNG
《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 miyao4.PNG

  • 到服务器绑定秘钥

    《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 bang.PNG

《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 bang1.PNG

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

《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 bang2.PNG
《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 bang3.PNG
《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 bang4.PNG

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

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

    《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 conn2.PNG

《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 connsuccess.PNG

1.2配置服务器环境###

1.2.1新增用户####

输入指令:sudo adduser username

《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 adduser.PNG

输入指令:
cd /home/username

sudo usermod -aG sudo username为用户添加sudo权限

su root提升用户权限:#是系统管理员,$是普通管理员

《腾讯云服务器+Ubuntu+Scrapy抓取网页数据》 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.参考来源##

    原文作者:狸狸深深
    原文地址: https://www.jianshu.com/p/885f600635ee
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞