Linux云服务器下配置Scrapy并抓取数据

简介: 基础装备:Linux云服务器(阿里云Ubuntu 16.04);  建立远程连接的软件(这里用的是XShell);友情链接:Scrapy入门教程:http://scrapy-chs.

基础装备:

Linux云服务器(阿里云Ubuntu 16.04);
  建立远程连接的软件(这里用的是XShell);

友情链接:

Scrapy入门教程:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/tutorial.html
Scrapy-Github地址:https://github.com/scrapy/scrapy
XShell官网下载:http://www.netsarang.com/xshell_download.html
XShell百度下载:http://rj.baidu.com/soft/detail/15201.html?ald
ubuntu常用命令:http://www.jianshu.com/p/1340bb38e4aa
tips: 连接到云服务器之后请先更新操作系统!!!


----------------------------------看完觉着有用的话帮忙点个赞哦~-----------------------------------------

目录
  1. Ubuntu 16.04云服务器下Scrapy的配置
    • 使用ssh方法连接到服务器
    • 查看python版本
    • 用pip安装virtualenv
    • 创建虚拟环境
    • pip安装twisted
    • 其他相关软件包安装
    • 安装cryptography
    • 安装scrapy
  2. Scrapy抓取网页源码
    • 找到spiders文件夹
    • 本地编写spiders文件并上传
    • 执行文件
  3. Scrapy抓取多页数据
    • 本地编写spiders文件
    • 上传并执行文件
  4. Scrapy抓取指定数据
    • 本地编写spiders文件
    • 上传并执行文件
  5. 总结

Ubuntu 16.04云服务器下Scrapy的配置


使用ssh方法连接到云服务器

img_eedaac90474c5df2e0743857e7e3aa56.png
xshell-new.PNG

新建-->输入主机IP-->确定-->输入用户名和密码-->连接成功-->进入打算安装scrapy的文件夹
如果不知道怎样创建新用户和进入文件夹的请移步到 Ubuntu常用命令整理
友情链接: xshell登陆详解--腾讯云服务器+Ubuntu+Scrapy抓取网页数据
注意:xshell输入密码会有对话框弹出;在linux系统中输入密码不会有显示,输入完后Enter即可。

查看python版本

img_5081473af6024fd06a4d2ede77ae2393.png
00--py.PNG

python --version

--version用于查看版本

用pip安装virtualenv

img_f2b4113f2f03842290ca8b677bda2e94.png
01--virtualenv.PNG

sudo pip install virtualenv
virtualenv --version

sudo命令必须在root权限用户或者被赋予sudo权限的用户执行;
给普通用户赋sudo权限

usermod -aG sudo username

virtualenv 简介

virtualenv 是一个创建隔绝的Python环境的工具。virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包。

相关链接:
  http://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/
  https://docs.python.org/3/library/venv.html

创建 venv 虚拟环境

img_2784536315def2ce70e1d76b863ab767.png
02--venv.PNG

virtualenv venv
cd venv
ls
source bin/activate

virtualenv venv 将会在当前的目录中创建一个文件夹,包含了Python可执行文件,以及 pip 库的一份拷贝,这样就能安装其他包了。虚拟环境的名字(此例中是 venv )可以是任意的;若省略名字将会把文件均放在当前目录。
  其中,cd命令用于进入指定目录;ls用于查看当前目录;
  source bin/activate用于激活venv, 每次要开始使用虚拟环境之前都需要激活。
  激活后,当前虚拟环境的名字会显示在提示符左侧(比如说 (venv)你的电脑:你的工程 用户名$)以显示它是激活的。从现在起,任何使用pip安装的包将会放在 ``venv 文件夹中,与全局安装的Python隔绝开。

pip安装twisted

img_43b280c06d2c25e395f0e17ca68484c9.png
03--twisted.PNG

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple twisted

Twisted是一个python编写的事件驱动网络引擎。支持许多常见的网络协议,包括SMTP,POP3,IMAP,SSHv2和DNS。


如果Twisted版本过高,要降包适配。

相关链接:
  pip常用命令总结:http://blog.csdn.net/ezreal_king/article/details/61474541
  twisted官网:https://twistedmatrix.com/trac/
  twisted-gitbook:https://www.gitbook.com/book/likebeta/twisted-intro-cn/details

其它相关软件包安装

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

这里由于忘记sudo apt-get update,出了一点点小问题..

img_866551cb83c96869c62dc13cac4f8c00.png
q1--unablelibssldev.PNG

所以千万要记得经常给服务器update!!!

软件包介绍:
build-essential: Informational list of build-essential packages
libssl-dev:是OpenSSL项目实施SSL和TLS加密协议的一部分,用于通过Internet进行安全通信。
libffi-dev:外部函数接口库(开发文件)
python-dev:头文件和Python的静态库(默认)

相关链接:
  libffi介绍:https://sourceware.org/libffi/

安装cryptography

img_4ffc3467cb007cfcedb0066dbe3acfb2.png
04--cryptography.PNG

pip install cryptography

cryptography[加密]是一种为Python开发人员提供加密配方和原语的软件包。

cryptography includes both high level recipes, and low level interfaces to common cryptographic algorithms such as symmetric ciphers, message digests and key derivation functions.

来源:https://pypi.python.org/pypi/cryptography
相关链接:
cryptography开发文档:https://cryptography.io/en/latest/

安装scrapy

img_5f42626027897e998685cdda8140d7a1.png
06--quotes.PNG

pip install scrapy
scrapy --version
scrapy startproject quotes(工程名)

到这里,scrapy已经成功安装在了我们的Ubuntu云服务器上。
接下来,就可以开始写代码进行数据爬取了。

Scrapy抓取网页源码

------------------------------------以抓取quotes网站的名人名言为例------------------------

找到spiders文件夹

这里如果中断了之前的连接,需要重新激活

激活并进入虚拟环境
img_1b6fa57115293ca2e62c14bb34907a4e.png
01--activate.PNG

cd /home/slx/venv //进入venv虚拟环境的目录
source bin/activate //激活

img_a19531ac9b4d5da82229fa7e91b05e19.png
02--tree.PNG
cd slx_quotes                  //进入venv下新建工程的目录  
tree                           //查看当前目录  
(如果没有安装tree,输入命令sudo apt-get install tree进行安装)  
cd slx_quotes/spiders          //进入spiders目录下  

目录分析:

scrapy.cfg/
slx_quotes/
    __init__.py
    items.py
    middlewares.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
  • scrapy.cfg:项目配置文件
  • slx_quotes/:该项目的python模块,之后在这里加入代码
  • slx_quotes/items.py:项目中的item文件
  • slx_quotes/middlewares.py:spider中间件文件
  • slx_quotes/pipelines.py:项目管道组件文件
  • slx_quotes/settings.py:项目的设置文件
  • slx_quotes/spiders/:放置spider代码的目录

本地编写spider代码并上传

import scrapy

class QuotesSpider(scrapy.Spider):
        name = "slx_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 = 'slx-quotes-%s.html' % page
            with open(filename, 'wb') as f:
                f.write(response.body)
                self.log('Saved file %s' % filename)
  • 三个属性:
    • name: 用于区别不同的spider.必须是唯一的,不能为不同的spider设定相同的名字。
    • start_urls:包含了Spider在启动时进行爬取的url列表。
    • parse() :是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
      page通过response.url取到了页码数;
      filename是保存的文件名;
      self.log在控制台打印出日志信息,显示文件名。
  • %s介绍:
    python字符串格式化符号:
    符 号 描述
    %c 格式化字符及其ASCII码
    %s 格式化字符串
    %d 格式化整数
    %u 格式化无符号整型
    %o 格式化无符号八进制数
    %x 格式化无符号十六进制数
    %X 格式化无符号十六进制数(大写)
    %f 格式化浮点数字,可指定小数点后的精度
    %e 用科学计数法格式化浮点数
    %E 作用同%e,用科学计数法格式化浮点数
    %g %f和%e的简写
    %G %f 和 %E 的简写
    %p 用十六进制数格式化变量的地址
    来源:http://www.runoob.com/python/python-strings.html
    参考:http://www.cnblogs.com/wilber2013/p/4641616.html

把写好的py文件拖进spiders目录下

img_e41ad922289e84998f2c6f12f19db672.png
03--rz.PNG

执行文件

img_13274a92348d9d2cfd8bd54439d36492.png
04-scrapy.PNG
img_82c368844b557a6e3155e00a5d5e8c75.png
04-scrapy2.PNG

scrapy crawl slx_quotes
find / -name slx-quotes-1.html
sz

执行爬虫后,我们得到了html文件,找到它并且保存到本地(这里我用的lrzsz方法执行sz命令进行保存)


得到html文件

img_1a7c98705b9979848e11b817397ce08e.png
05--scrapyhtml.PNG

我们也可以用chrome的开发者工具分析网页的格式

img_7df9d1eb42226439a94dbd99b95c243c.png
05--chrome.PNG

---------------这里是MobaXterm上传下载及查找文件的方法-----
如果找不到home文件夹的话,它可能藏在这里了...

img_dcc749ee163ff9985112ebe7cc9cf900.png
找到home1
img_1f1b957da5c50f62f6692939eb0cd405.png
找到home2

img_3540ad5f0bafcc7b47ced009aead993b.png
在这里上传下载

左上角有上传下载的按钮,点击即可。也可以把文件直接拖进来。
标题从左到右:文件名;大小;最后一次修改时间;所有者;所属组;权限
如果遇到了Permission denied,可能是由于权限不够, 修改文件权限方法

Scrapy爬取多页Json数据

本地编写Spiders文件

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "slx_quotes_spider"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
    ]


    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)

(如果遇到not found或者unexpected indent,可能是空格或缩进有问题。这里的代码缩进我又进行了对照完善,现在的缩进是没有问题的,可以对照检查缩进)

上传文件并执行

具体操作方法和之前一样;
这次把爬取的数据保存为json文件

scrapy crawl slx_quotes_spider -o slx_05011447.json

第一个参数与代码中name相同;name在每个爬虫中都是唯一标识的;不同的爬虫应该取不同的name.
第二个参数是你想要保存的json文件名

Scrapy抓取指定数据

本地编写spiders文件

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "tag_ys"
    start_urls = [
        'http://quotes.toscrape.com',
    ]

    def parse(self, response):  
            for href in response.css('span.tag-item a::attr(href)'): 
                    url =response.urljoin(href.extract())
            print href.extract() 
                    yield scrapy.Request(url, callback=self.parse1)  

    def parse1(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.parse1)

这段代码主要是用于爬取quotes.toscrape.com网页中热门标签下的名人名言,通过抓取当前页面的热门标签的url地址,链接到对应的页面再次进行数据抓取。

上传并执行文件

scrapy crawl tag_ys -o tag_ys.json

抓取json数据结果如下:

img_8faf319c588b2532350f1bd80d347a35.png
tag_ys.PNG

如果需要xml数据,可用json转xml在线工具进行转换
当然,也可以自己用java造轮子自行转换

总结

通过几天的学习与整理,我对scrapy框架有了更深刻的理解和认识,也在scrapy安装过程中巩固了ubuntu基础知识。在学习的过程中,通过发现问题与解决问题,逐渐完善自己的知识体系。

主要用到的知识点有:

  • Ubuntu基础知识;
  • python基础知识;
  • scrapy基础;
  • css选择器;
  • xpath选择器;
  • 正则表达式

我的其他文章:
robots.txt学习笔记----以亚马逊&Github为例
Ubuntu 常用命令整理

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
26天前
|
监控 安全 Linux
RHEL 环境下 Subversion 服务器部署与配置
【10月更文挑战第18天】在RHEL环境下部署Subversion服务器需依次完成安装Subversion、创建版本库、配置服务器、启动服务、客户端连接及备份维护等步骤。确保遵循安全最佳实践,保障数据安全。
|
1天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
1天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
8 5
|
2天前
|
存储 缓存 固态存储
阿里云服务器2核8G、4核16G、8核32G配置租用收费标准与活动价格参考
2核8G、8核32G、4核16G配置的云服务器处理器与内存比为1:4,这种配比的云服务器一般适用于中小型数据库系统、缓存、搜索集群和企业办公类应用等通用型场景,因此,多为企业级用户选择。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
2天前
|
存储 编解码 安全
阿里云服务器2核4G、4核8G、8核16G配置租用收费标准与活动价格参考
通常情况下,个人和一般企业用户在购买阿里云服务器时比较喜欢购买2核4G、4核8G、8核16G等配置,这些配置既能满足各种图文类中小型网站和应用又能满足企业网站应用、批量计算、中小型数据库系统等场景,2核4G配置适合新手入门或初创企业,4核8G与8核16G兼具成本与性能优势,适合通用场景,本文介绍这些配置的最新购买价格,包含原价收费标准和最新活动价格。
|
22天前
|
JSON JavaScript 前端开发
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
55 22
|
8天前
|
PHP 数据库 数据安全/隐私保护
布谷直播源码部署服务器关于数据库配置的详细说明
布谷直播系统源码搭建部署时数据库配置明细!
|
9天前
|
人工智能 安全 Linux
|
15天前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
35 2
|
16天前
|
存储 数据挖掘
服务器数据恢复—用RAID5阵列中部分盘重建RAID5如何恢复原raid5阵列数据?
服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障,用户方请人维修。维修人员在没有了解故障磁盘阵列环境的情况下,用另外4块硬盘(除去掉线的硬盘)重新创建了一组全新的RAID5阵列并完成数据同步,导致原raid5阵列数据全部丢失。
下一篇
无影云桌面