python里面的yield怎么用?
yield from是什么意思?
scrpay
The best way to learn is with examples, and Scrapy is no exception.
常用命令
scrapy startporject
scrapy crawl hello
scrapy shell http://www.qq.com
打开页面
提取数据
保存参数
scrapy概述
就如同web开发有框架flask spring等等,爬虫也是有框架的,scrapy就是一个爬虫框架,或者说是爬虫引擎。
安装
pip3 install scrapy
使用
以爬取这个网站为例子 quotes.toscrape.com
- 第一创建一个爬虫应用。
scrapy startproject tutorial
目录结构如下
- 第二步写一个爬虫。爬取网站提取数据。
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)
解释说明
start_requests()
parse()
运行爬虫
scrapy crawl quotes
保存数据
parse yield的结果可以持久化的保存起来
follow links
首先定位到页面的links,注意这里的links可能是相对的,要进行转换
你可以在parse里面yield scrapy.Request,
response.follow 是Request的快捷写法
使用参数
使用场景,例如外部调用爬虫任务传递一个参数过来
- 第三步。在命令行里面导出爬取的数据。
可以通过shell进行调试
scrapy shell 'http://quotes.toscrape.com/page/1/'
view(response) 可以在浏览器里面打开
- 第四步递归爬取链接。
- 第五步使用爬虫参数。
scrapy架构
遗留问题
scrapy可以部署成一个服务吗?