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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
Python Pandas数据结构简单介绍
Jul 03 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
Python闭包及装饰器运行原理解析
Jun 17 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 Python
写好Python代码的几条重要技巧
May 21 Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
php 字符串函数收集
2010/03/29 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
Python交换变量
2008/09/06 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
解读python logging模块的使用方法
2018/04/17 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Python列表的切片实例讲解
2019/08/20 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
外贸英语毕业生自荐信
2013/11/14 职场文书
行政主管岗位职责
2013/11/18 职场文书
货车司机岗位职责
2014/03/18 职场文书
就业协议书怎么填
2014/09/15 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript