一、配置环境
在CMD命令台输入安装命令:
> pip install scrapy
检查安装情况:
> scrapy
Scrapy 1.5.0 - no active project
Usage:...
#返回以上信息说明安装成功
二、爬虫命令台命令
Available commands:
bench Run quick benchmark test
check Check spider contracts
crawl Run a spider
edit Edit spider
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
list List available spiders
parse Parse URL (using its spider) and print the results
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
三、建立第一个Scrapy爬虫
在CMD下转到工程文件夹,之后输入:
#新建爬虫工程
> scrapy startproject test_proj
> cd test_proj
以和讯银行的官网示例:
#以默认模板建立一个爬虫文件test
> scrapy genspider test bank.hexun.com
运行爬虫:
> scrapy crawl test
2018-05-08 22:45:22 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: study)
2018-05-08 22:45:22 [scrapy.utils.log] INFO: Versions: lxml 4.1.1.0, libxml2 2.9.7, cssselect 1.0.3, parsel 1.4.0, w3lib 1.19.0, Twisted 17.9.0, Python 2.7.14 |Anaconda, Inc.| (default, Nov 8 2017, 13:40:45) [MSC v.1500 64 bit (AMD64)], pyOpenSSL 17.5.0 (OpenSSL 1.0.2n 7 Dec 2017), cryptography 2.1.4, Platform Windows-10-10.0.16299
2018-05-08 22:45:22 [scrapy.crawler] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'study.spiders', 'SPIDER_MODULES': ['study.spiders'], 'ROBOTSTXT_OBEY': True, 'BOT_NAME': 'study'}
[...]
#输出的是日志,其中包括了各个板块的信息,加上参数可以不打印日志
> scrapy crawl test --nolog
四、初步爬取网页内容
当你正式开始Scrapy的学习的时候,一定不要觉得框架啥的就很高大上,本质上你要写的东西还是那么多:根据URL生成Requests和Response,下载源码,筛选信息,数据保存,反爬机制……
总之一句话,按下文顺序,在该写的地方写上你的代码,很快你就体会到Scrapy是如何工作的,进而好像大彻大悟地学会了Scrapy!而很多骚操作,后续再说。
首先是spider文件夹下的主爬虫程序:
# -*- coding: utf-8 -*-
import scrapy
class TestSpider(scrapy.Spider):
name = 'test'
allowed_domains = ['bank.hexun.com']
start_urls = ['http://bank.hexun.com/']
def parse(self, response):
filename = 'successfully.txt'
with open(filename, 'wb') as f:
f.write(response.url.split('/')[-2]+'\n')
f.write(response.body)
1.Scrapy为Spider的start_urls
属性中的每个URL创建了scrapy.Request
对象,并将 parse()
方法作为回调函数赋值给了Request
。
2.Request
对象经过调度,执行生成scrapy.http.Response
对象并送回给上述的parse()
方法。
五、定位页面标签
在商业爬虫scrapy,BeautifulSoup
的方法已经落伍了。在前面的学习中,已经使用到了Xpath
和re
正则的方法来定位标签。Scrapy使用了一种基于 XPath 和 CSS 表达式机制: Scrapy Selectors。
1、Xpath表达式
/html/head/title #选择HTML文档中<head>标签内的<title>元素
/html/head/title/text() #选择上面提到的 <title> 元素的文字
//td #选择所有的 <td> 元素
//div[@class="mine"] #选择所有具有class="mine"属性的div元素
2、CSS表达式
#一个示例
'div.temp01 ul li a::attr(href)'
3、Selector四个基本方法
xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。
css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表.
extract(): 序列化该节点为unicode字符串并返回list。
re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。
4、scrapy shell
scrapy集成了一个本人十分喜欢的shell
系统,可以实时调试标签定位。
> scrapy shell http://bank.hexun.com/yhjg/ --nolog
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x0000000007E17D68>
[s] item {
}
[s] request <GET http://bank.hexun.com/yhjg/>
[s] response <200 http://bank.hexun.com/yhjg/>
[s] settings <scrapy.settings.Settings object at 0x0000000007E17898>
[s] spider <TestSpider 'test' at 0x8a4dda0>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s] fetch(req) Fetch a scrapy.Request