Linux云服务器下配置Scrapy并抓取数据
基础装备:
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: 连接到云服务器之后请先更新操作系统!!!
----------------------------------看完觉着有用的话帮忙点个赞哦~-----------------------------------------
目录
- Ubuntu 16.04云服务器下Scrapy的配置
- 使用ssh方法连接到服务器
- 查看python版本
- 用pip安装virtualenv
- 创建虚拟环境
- pip安装twisted
- 其他相关软件包安装
- 安装cryptography
- 安装scrapy
- Scrapy抓取网页源码
- 找到spiders文件夹
- 本地编写spiders文件并上传
- 执行文件
- Scrapy抓取多页数据
- 本地编写spiders文件
- 上传并执行文件
- Scrapy抓取指定数据
- 本地编写spiders文件
- 上传并执行文件
- 总结
Ubuntu 16.04云服务器下Scrapy的配置
使用ssh方法连接到云服务器
新建-->输入主机IP-->确定-->输入用户名和密码-->连接成功-->进入打算安装scrapy的文件夹
如果不知道怎样创建新用户和进入文件夹的请移步到Ubuntu常用命令整理
友情链接:xshell登陆详解--腾讯云服务器+Ubuntu+Scrapy抓取网页数据
注意:xshell输入密码会有对话框弹出;在linux系统中输入密码不会有显示,输入完后Enter即可。
查看python版本
python --version
--version用于查看版本
用pip安装virtualenv
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 虚拟环境
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
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,出了一点点小问题..
所以千万要记得经常给服务器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
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
pip install scrapy
scrapy --version
scrapy startproject quotes(工程名)
到这里,scrapy已经成功安装在了我们的Ubuntu云服务器上。
接下来,就可以开始写代码进行数据爬取了。
Scrapy抓取网页源码
------------------------------------以抓取quotes网站的名人名言为例------------------------
找到spiders文件夹
这里如果中断了之前的连接,需要重新激活
激活并进入虚拟环境
cd /home/slx/venv //进入venv虚拟环境的目录
source bin/activate //激活
cd slx_quotes //进入venv下新建工程的目录
tree //查看当前目录
(如果没有安装tree,输入命令sudo apt-get install tree进行安装)
cd slx_quotes/spiders //进入spiders目录下
目录分析:
scrapy.cfg/
slx_quotes/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__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 scrapyclass 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' % pagewith 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目录下
执行文件
scrapy crawl slx_quotes
find / -name slx-quotes-1.html
sz
执行爬虫后,我们得到了html文件,找到它并且保存到本地(这里我用的lrzsz方法执行sz命令进行保存)
得到html文件
我们也可以用chrome的开发者工具分析网页的格式
---------------这里是MobaXterm上传下载及查找文件的方法-----
如果找不到home文件夹的话,它可能藏在这里了...
左上角有上传下载的按钮,点击即可。也可以把文件直接拖进来。
标题从左到右:文件名;大小;最后一次修改时间;所有者;所属组;权限
如果遇到了Permission denied,可能是由于权限不够,修改文件权限方法
Scrapy爬取多页Json数据
本地编写Spiders文件
import scrapyclass 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 scrapyclass 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数据结果如下:
如果需要xml数据,可用json转xml在线工具进行转换
当然,也可以自己用java造轮子自行转换
总结
通过几天的学习与整理,我对scrapy框架有了更深刻的理解和认识,也在scrapy安装过程中巩固了ubuntu基础知识。在学习的过程中,通过发现问题与解决问题,逐渐完善自己的知识体系。
主要用到的知识点有:
- Ubuntu基础知识;
- python基础知识;
- scrapy基础;
- css选择器;
- xpath选择器;
- 正则表达式
我的其他文章:
robots.txt学习笔记----以亚马逊&Github为例
Ubuntu 常用命令整理
Linux云服务器下配置Scrapy并抓取数据相关推荐
- 巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!
巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力! 一.什么是tmpfs和/dev/shm/? tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使用您的 ...
- Linux云服务器下Tomcat部署超详细
基于阿里云Centos 7服务器的Tomcat 项目部署 工具:一台安装jdk1.8的Centos 6/7.X 云服务器(64位) Putty ssh远程连接云服务器的软件 FileZillaCli ...
- 浏览器直接访问Linux云服务器下的文件
1.首先需要在云服务器上安装node.js 安装详细步骤:https://blog.csdn.net/YXWik/article/details/103277633 2.安装http-server n ...
- linux服务器云防火墙配置文件,Linux云服务器防火墙配置之Firewalld
Centos 7之Firewalld相关命令详细介绍 引言:Centos 7是目前非常流行的Linux发行版本,本文将重点介绍如何来使用firewalld相关命令启动服务以及添加服务或者端口等操作. ...
- linux服务器查询vdc等等,Linux云服务器
Linux 云服务器分区.格式化.挂载数据盘 在控制台创建和挂载云硬盘后,需要将数据盘格式化并挂载到云服务器. Attention 格式化后数据将被清空,请确保数据盘中没有数据或已保留备份: 已格式化 ...
- 基于CentOS的Linux云服务器搭建
第一步:先登录至云服务器 第二步:分区和格式化数据盘 前提条件 已购买数据盘的用户,需要格式化数据盘才可使用.未购买数据盘的用户可以跳过此步骤. 请确保您已完成步骤三操作,登录到云服务器. 大于 2T ...
- server2012JAVA环境变量_Windows2012云服务器怎么配置java环境变量?
一.Java为何要配置环境变量? 所有学习java的小伙伴应该都知道,学习的第一步就是要学习java的环境变量配置. 1.变量 知道吧? 对,就是可以随意给其赋值的一个存储单元. 2.那么环境呢? 首 ...
- python scarpy文献_使用python scrapy框架抓取cnblog 的文章内容
scrapy 的文档请移驾到 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html 1.准备工作 安装python .Spyde ...
- 夜神模拟器抓取数据包
学习记录 & 以及为需要的人节约时间 1.拿到burp 的证书文件, 2.使用kali 自带的openssl 对证书进行处理 openssl x509 -inform DER -in cace ...
最新文章
- GTX1080 安装 CUDA 7.5
- Python_第一堂课
- 紧急通知,读者服务群大调整
- 【错误记录】Android Studio 编译报错 ( SDK location not found )
- Hadoop与Hbase基本配置
- java文档注释生产api没有注释_一个神奇的没有springboot注释的api文档生成器---JApiDocs...
- 前端学习(2862):简单秒杀系统学习之前端优化图片
- 鸿蒙系统跟腾讯合作,要和华为鸿蒙竞争?腾讯系统开源了,仅1.8K,支持众多芯片 - 区块网...
- redis的主从复制,哨兵值守
- educoder MongoDB 实验——数据库优化
- Maven项目main和test文件夹说明
- 计算机云计算中心建设项目,某大学计算机云计算云数据中心建设方案.docx
- SQL--取得子部门的存储过程
- matlab调和均值滤波_matlab-均值滤波
- NXP RT1052 eFlexPWM—灵活的增强型 PWM
- 服务器Raid数据恢复,磁盘阵列数据恢复,raid 5数据恢复算法原理
- Linux文件颜色含义
- 利用QVOD架设流媒体服务器/电影服务器/vod服务器
- 诛仙mysql数据库清空_数据库管理,启动命令,输入密码,用户名,虚拟机诛仙zx1324-1345一键镜像端、纯端kfvip - Welcome to XiongTianQi.CN...
- ImageLoader 图片异步加载类库的使用