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

所需工具

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.参考来源##

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容