浅谈Scrapy爬虫(一)
以下谈论的 scrapy 基于 0.20.2 版本(当前最新版本是 0.22.0 ),python 2.7.6。
开发环境是windows 7 sp1。
互联网上比较有价值的参考资料
1. Scrapy入门教程
对官网文档的翻译,主要讲了 scrapy 的基本使用。创建一个工程,使用 item 和 spider 。我们会简单涉及到官方教程的内容。
这篇文章并未涉及到代码细节,介绍了一些使用 scrapy 的经验,用的是较老的0.9版本。我们会对该文章涉及到的内容简单展开。
一 安装 scrapy
因为不同的版本 scrapy 依赖库变换很大,网上的安装教程版本太老,所以我的建议是直接安装 scrapy ,运行 scrapy 时 python 打印的错误可以看出是缺少了哪个库,缺了哪个安装哪个。
安装 scrapy 后 会多出 python/Scripts 目录,记得添加到环境变量,这样才能直接在命令行使用“scrapy”命令。
二 创建项目
在命令行运行 “scrapy startproject 项目名”可以直接在当前目录创建 scrapy 工程。
工程目录会有如下文件:
scrapy.cfg
配置文件,开发中基本用不到。
ajian\item.py
这里主要处理递归爬取和返回页面数据。
ajian\pipelines.py
返回的数据会传到这里,进行下一步处理。存储到数据库或者进行分析,随你喜欢。
ajian\settings.py
设置文件,有很多有趣的设置,比如是深度还是广度爬,对每个IP的爬虫数,每个域名的爬虫数,总爬虫数,爬虫延时等等。
ajian\__init__.py
ajian\spider\__init__.py
上述两个文件是 python 包要求的文件,对 scrapy 作用不大。
三 构建第一个蜘蛛
使用命令构建的项目默认生成了 pipelines.py 却没有生成 spider.py 文件,有点让人摸不着头脑。不过无所谓,我们自己写一个就好了。在 spider 新建文件 ajian_spider.py 内容如下。
from scrapy.spider import BaseSpider class AJianSpider(BaseSpider):
name = "ajian"
start_urls = [
"http://www.163.com/"
] def parse(self, response):
print response.body
其中 name 变量和 start_urls 是必须的,name 变量是启动 scrapy 抓取时指定的蜘蛛名, start_urls 是初始抓取的 url,是个 list,可以指定多个。现在一个最简单的蜘蛛就做好了,只有一个功能,输出163的页面内容。
这个蜘蛛太逊了,我们加上最基本的功能,返回页面内容、递归爬取。
在讲返回页面内容和递归爬取之前,先了解一些背景知识。
spider.py 文件中的 parse 函数实际是个迭代器,python 有一个命令 yield ,有一篇文章很详细的说明了 yield 的作用。这里简略描述一下。当调用 yield 时,不仅会返回值,还会记录当前函数的状态,在下次调用函数时,会从调用 yield 的下一句开始执行。相当于函数执行到一半,先返回给调用者一个结果,再接着执行。
parse 可以返回两种对象,一种是 item 另外一种是 Request,分别对应着页面内容和递归请求。
如果返回的是Request,那么会将这个返回结果放到待抓取列表;如果返回的是item,则会传递到pipelines.py进行处理。
待续。。。
浅谈Scrapy爬虫(一)的更多相关文章
- 浅谈 Scrapy 爬虫(二)
越写越像官方文档的翻译,偏离了初衷.写一些官方文档里没有的内容吧. 在不限制宽带的环境下,根据页面的大小, Scrapy 一秒能爬取40-70个页面,一天在400万到600万页面.也就是说 Scr ...
- crawler_浅谈网络爬虫
题记: 1024,今天是个程序猿的节日 ,哈哈,转为正题,从事了一线网络爬虫开发有近1000天.简单阐述下个人对网络爬虫的理解. 提纲: 1:是什么 2:能做什么 3:怎么做 4:综述 1:是什么 w ...
- 浅谈scrapy框架安装使用
Scrapy笔记: 一 安装: pip3 install wheel pip3 install lxml pip3 install pyopenssl pip3 install -i https:// ...
- 浅谈网络爬虫爬js动态加载网页(二)
没错,最后我还是使用了Selenium,去实现上一篇我所说的问题,别的没有试,只试了一下firefox的引擎,总体效果对我来说还是可以接受的. 继续昨天的话题,既然要实现上篇所说的问题,那么就需要一个 ...
- 浅谈网络爬虫爬js动态加载网页(一)
由于别的项目组在做舆情的预言项目,我手头正好没有什么项目,突然心血来潮想研究一下爬虫.分析的简单原型.网上查查这方面的资料还真是多,眼睛都看花了.搜了搜对于我这种新手来说,想做一个简单的爬虫程序,所以 ...
- 浅谈网络爬虫爬js动态加载网页(三)
上一篇讨论了web driver对动态网页的抓取与分析,可以很清楚的看出这是一种集中式处理方式,简单说,就是利用服务器,打开一个真正的brower,然后将需要解析的地址交给浏览器,浏览器去解析,然后将 ...
- scrapy分布式浅谈+京东示例
scrapy分布式浅谈+京东示例: 学习目标: 分布式概念与使用场景 浅谈去重 浅谈断点续爬 分布式爬虫编写流程 基于scrapy_redis的分布式爬虫(阳关院务与京东图书案例) 环境准备: 下载r ...
- 浅谈爬虫 《一》 ===python
浅谈爬虫 <一> ===python ‘’正文之前先啰嗦一下,准确来说,在下还只是一个刚入门IT世界的菜鸟,工作近两年了,之前做前端的时候就想写博客来着,现在都转做python了,如果还 ...
- python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
随机推荐
- 谢欣伦 - OpenDev原创教程 - 通信开发库libComm
libComm是一个免费的简单的通信库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 Sample using libComm - v1.1 For WinXP lib ...
- MongoDB的配置、启动、关闭
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...
- mac安装tensorflow报错
问题:mac安装tensorflow过程中,爆出oserror:permission denied 解决方案:关闭mac的sip,然后sudo安装 关闭sip的方法:重启mac,按住command+R ...
- Java 同步代码块 - Synchronized Blocks
java锁实现原理: http://blog.csdn.net/endlu/article/details/51249156 The synchronized keyword can be used ...
- 【转】jquery.cookie.js的使用
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是 ...
- VECTOR COMPUTATION
COMPUTER OR GANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION Although the perform ...
- crontab执行时间和系统时间不一致
最近发现一个非常奇怪的问题,症状如下: crontab 定时任务 配置时间 是 10 5 * * * (每日凌晨5点10分执行) 运行脚本时间却是 18:10左右 Dec 24 05:10:01 ht ...
- 如何给main传参数
main 函数的参数有连个argc argcv[] argc 是参数个数 argcv是参数的数组指针,且argcv的第一个参数是默认程序路径加程序名 给main传参数,需要在命令行启动程序时设置 如 ...
- linux实践之ELF文件分析
linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf ...
- 升级win8.1后mysql服务不能启动的问题
升级win8.1后发现服务列表中MySQL55不见了. 1. 先把服务恢复. mysql没有看到maitenance,找到安装文件 mysql-installer-community-5.6.12.0 ...