Scrapy1.7入门中文教程(一)
Scrapy是一个能被用来爬网站、截取数据的应用框架,在数据挖掘、信息处理等方面有着很广泛的应用。
创建工程
切换至合适的目录后,在终端输入,scrapy会帮你创建一个名叫tutorial的工程
$ scrapy startproject tutorial
各级文件及其作用如下
创建你的第一个爬虫
在tutorial/spiders目录下创建一个名叫quotes_spider.py的文件,里面写上这样的代码。
```python
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
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):
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)
如你所见,我们的Spider子类scrapy.Spider并定义了一些属性和方法:
name:标识Spider。它在项目中必须是唯一的,也就是说,你不能为不同的Spiders设置相同的名称。
start_requests():必须返回一个可迭代的请求(你可以返回一个请求列表或编写一个生成器函数),Spider将开始从中爬行。后续请求将从这些初始请求中连续生成。
parse():将调用一个方法来处理为每个请求下载的响应。 response参数是TextResponse的一个实例,它保存页面内容并具有处理它的其他有用方法。
parse()方法通常会解析响应,提取已删除的数据作为dicts,并查找要遵循的新URL以及从中创建新请求(Request)。
运行爬虫
回到工程的最顶层目录,运行:
$scrapy crawl quotes
⚠️注意,这里的quotes上我们刚才命名的名字。
然后爬虫会向网站发送请求,出现类似这样的东西
查看结果
可以看到,tutorial目录下出现了两个json文件,里面就是我们爬下来的内容。由于parse()内没有对response做任何处理,所以这里爬下来的就是网页源码。