今天开始scrapy的学习,环境 ubuntu 16.04 python3.5
1. 创建scrapy爬虫工程
通过终端进入要放置爬虫的文件夹,在我的环境中 ~/PycharmProjects/ScrapyWord/tutorial
使用命令:scrapy startproject tutorial
会创建tutorial文件夹,在这个文件夹下面会包含相应的内容。
2. 创建第一个spider类
在spiders文件夹下面可以添加一个名称为quotes_spider.py的文件,内容如下(其中有注释不做过多说明)
import scrapy class Quotespider(scrapy.Spider): name = 'quotes' # spider的标识,使用name属性来区分不同的spider,不同的spider不能够拥有相同的名字属性 def start_requests(self): # start_requests方法必须返回可迭代的Request对象,这个spider将这些对象作为起始初始化请求对象 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): # 在parse方法中每一个request请求发出之后会在这个方法中返回对应的response对象, # 这个response对象为textResponse对象,包含了界面的内容和其他一些处理的方法。 # 在这个方法内部通常将数据分解为字典,还可以查找到新的url page = response.url.split("/")[-2] filename = 'quotes-%s.html' % page with open(filename, 'wb') as f: f.write(response.body) self.log('Saved file %s' % filename)
3. 如何使spider运行起来
在scrapy文档中使用 scrapy crawl quotes 命令来启动脚本,注意因该在脚本的top lelvel目录
但是我使用的pycharm IDE,在spiders上一级目录创建main.py
from scrapy import cmdline cmdline.execute("scrapy crawl quotes".split())
4. 在返回的response中查找元素
在parse方法中会返回response类型的对象。
使用response.css方法会返回一个selectlist的对象,这个对象类似于一个列表。如果要获取内容使用extract方法
print(response.css('title').extract())
如果要只获取text属性:
response.css('title::text').extract_first()
除了extract和extract_first两个方法之外还有re()方法。