Python之Scrapy爬虫框架安装及使用详解


Posted in Python onNovember 16, 2017

题记:早已听闻python爬虫框架的大名。近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享。有表述不当之处,望大神们斧正。

一、初窥Scrapy

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

本文档将通过介绍Scrapy背后的概念使您对其工作原理有所了解, 并确定Scrapy是否是您所需要的。

当您准备好开始您的项目后,您可以参考 入门教程 。

二、Scrapy安装介绍

Scrapy框架运行平台及相关辅助工具

Python 2.7(Python最新版3.5,这里选择了2.7版本)
Python Package: pip and setuptools. 现在 pip 依赖 setuptools ,如果未安装,则会自动安装setuptools 。
lxml. 大多数Linux发行版自带了lxml。如果缺失,请查看http://lxml.de/installation.html
OpenSSL. 除了Windows(请查看 平台安装指南)之外的系统都已经提供。
您可以使用pip来安装Scrapy(推荐使用pip来安装Python package).

pip install Scrapy

Windows下安装流程:

1、安装Python 2.7之后,您需要修改 PATH 环境变量,将Python的可执行程序及额外的脚本添加到系统路径中。将以下路径添加到 PATH 中:

 C:\Python27\;C:\Python27\Scripts\;

除此之外,还可以用cmd命令来设置Path:

c:\python27\python.exe c:\python27\tools\scripts\win_add2path.py

安装配置完成之后,可以执行命令python --version查看安装的python版本。(如图所示)

Python之Scrapy爬虫框架安装及使用详解

2、从 http://sourceforge.net/projects/pywin32/ 安装 pywin32

请确认下载符合您系统的版本(win32或者amd64)

从 https://pip.pypa.io/en/latest/installing.html 安装 pip

3、打开命令行窗口,确认 pip 被正确安装:

pip --version

4、到目前为止Python 2.7 及 pip 已经可以正确运行了。接下来安装Scrapy:

pip install Scrapy

至此windows下Scrapy安装已经结束。

三、Scrapy入门教程

1、在cmd中创建Scrapy项目工程。

 scrapy startproject tutorial

H:\python\scrapyDemo>scrapy startproject tutorial
New Scrapy project 'tutorial', using template directory 'f:\\python27\\lib\\site-packages\\scrapy\\templates\\project', created in:
 H:\python\scrapyDemo\tutorial

You can start your first spider with:
 cd tutorial
 scrapy genspider example example.com

2、文件目录结构如下:

Python之Scrapy爬虫框架安装及使用详解

解析scrapy框架结构:

scrapy.cfg: 项目的配置文件。
tutorial/: 该项目的python模块。之后您将在此加入代码。
tutorial/items.py: 项目中的item文件。
tutorial/pipelines.py: 项目中的pipelines文件。
tutorial/settings.py: 项目的设置文件。
tutorial/spiders/: 放置spider代码的目录。

3、编写简单的爬虫

1)、在item.py中配置需采集页面的字段实例。

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy
from scrapy.item import Item, Field

class TutorialItem(Item):
 title = Field()
 author = Field()
 releasedate = Field()

2)、在tutorial/spiders/spider.py中书写要采集的网站以及分别采集各字段。

# -*-coding:utf-8-*-
import sys
from scrapy.linkextractors.sgml import SgmlLinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from tutorial.items import TutorialItem

reload(sys)
sys.setdefaultencoding("utf-8")


class ListSpider(CrawlSpider):
 # 爬虫名称
 name = "tutorial"
 # 设置下载延时
 download_delay = 1
 # 允许域名
 allowed_domains = ["news.cnblogs.com"]
 # 开始URL
 start_urls = [
 "https://news.cnblogs.com"
 ]
 # 爬取规则,不带callback表示向该类url递归爬取
 rules = (
 Rule(SgmlLinkExtractor(allow=(r'https://news.cnblogs.com/n/page/\d',))),
 Rule(SgmlLinkExtractor(allow=(r'https://news.cnblogs.com/n/\d+',)), callback='parse_content'),
 )

 # 解析内容函数
 def parse_content(self, response):
 item = TutorialItem()

 # 当前URL
 title = response.selector.xpath('//div[@id="news_title"]')[0].extract().decode('utf-8')
 item['title'] = title

 author = response.selector.xpath('//div[@id="news_info"]/span/a/text()')[0].extract().decode('utf-8')
 item['author'] = author

 releasedate = response.selector.xpath('//div[@id="news_info"]/span[@class="time"]/text()')[0].extract().decode(
  'utf-8')
 item['releasedate'] = releasedate

 yield item

3、在tutorial/pipelines.py管道中保存数据。

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
import codecs


class TutorialPipeline(object):
 def __init__(self):
 self.file = codecs.open('data.json', mode='wb', encoding='utf-8')#数据存储到data.json

 def process_item(self, item, spider):
 line = json.dumps(dict(item)) + "\n"
 self.file.write(line.decode("unicode_escape"))

 return item

4、tutorial/settings.py中配置执行环境。

# -*- coding: utf-8 -*-

BOT_NAME = 'tutorial'

SPIDER_MODULES = ['tutorial.spiders']
NEWSPIDER_MODULE = 'tutorial.spiders'

# 禁止cookies,防止被ban
COOKIES_ENABLED = False
COOKIES_ENABLES = False

# 设置Pipeline,此处实现数据写入文件
ITEM_PIPELINES = {
 'tutorial.pipelines.TutorialPipeline': 300
}

# 设置爬虫爬取的最大深度
DEPTH_LIMIT = 100

5、新建main文件执行爬虫代码。

from scrapy import cmdline
cmdline.execute("scrapy crawl tutorial".split())

最终,执行main.py后在data.json文件中获取到采集结果的json数据。

Python之Scrapy爬虫框架安装及使用详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现定制交互式命令行的方法
Jul 03 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
跟老齐学Python之玩转字符串(2)
Sep 14 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
python在每个字符后添加空格的实例
May 07 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
python实现按行分割文件
Jul 22 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 Python
python字典操作实例详解
Nov 16 #Python
python实现报表自动化详解
Nov 16 #Python
TF-IDF算法解析与Python实现方法详解
Nov 16 #Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 #Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 #Python
用不到50行的Python代码构建最小的区块链
Nov 16 #Python
python内置函数:lambda、map、filter简单介绍
Nov 16 #Python
You might like
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
Javascript 事件流和事件绑定
2009/07/16 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python实现决策树分类算法
2017/12/21 Python
Python实现的rsa加密算法详解
2018/01/24 Python
python实现画圆功能
2018/01/25 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
python sort、sort_index方法代码实例
2019/03/28 Python
python实现代码统计器
2019/09/19 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
美国最大点评网站:Yelp
2018/02/14 全球购物
中医药大学毕业生自荐信
2013/11/08 职场文书
入党推优材料
2014/06/02 职场文书
企业消防安全责任书
2014/07/23 职场文书
2014年社区工作总结
2014/11/18 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书