目录css
Python2:适合爬取非中文html
Python3:适合爬取中文python
Scrapy是一种快速的高级Web爬行和Web抓取框架,用于抓取网站并从其页面中提取结构化数据。它可用于各类用途,从数据挖掘到监控和自动化测试。正则表达式
咱们将以最简单的方式运行蜘蛛,它在将访问并获取 http://quotes.toscrape.com上的名言(文本)、做者 :数据库
import scrapy class QuotesSpider(scrapy.Spider): name = 'quotes' start_urls = [ 'http://quotes.toscrape.com/', ] def parse(self, response): for quote in response.css('div.quote'): yield { 'text': quote.css('span.text::text').get(), 'author': quote.css('small.author::text').get(), } next_page = response.css('li.next a::attr("href")').get() if next_page: yield response.follow(response.urljoin(next_page), self.parse)
将以上代码放在一个文本文件中,将其命名为quotes_spider.py
,并使用 如下命令运行蜘蛛:json
scrapy runspider quotes_spider.py -o quotes.json
运行上述命令后,代码将在命令运行的目录下建立一个名为quotes.json
的文件,该文件包含JSON格式的列表,其中包含文本和做者,以下所示(为了更好的可读性,此处从新格式化):后端
[ { "text": "\u201cThe world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.\u201d", "author": "Albert Einstein" }, { "text": "\u201cIt is our choices, Harry, that show what we truly are, far more than our abilities.\u201d", "author": "J.K. Rowling" }, { "text": "\u201cThere are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.\u201d", "author": "Albert Einstein" }, ...省略97条... ]
当咱们运行“scrapy runspider quotes_spider.py”命令时,Scrapy会查找Spider的定义并经过其爬虫引擎运行它;缓存
经过向start_urls 属性中定义的URL发出请求(在上述示例中即:start_urls = ['http://quotes.toscrape.com/'])开始爬行,并调用默认回调方法parse,将响应对象做为参数进行传递;并发
在parse回调方法中,咱们使用CSS Selector循环遍历quote元素,并将提取的名言文本和做者生成Python dict,除此以外咱们还查找指向下一页的连接,将得到的下一页连接再次以一样的方式进行请求处理;框架
在这里,咱们能够看到Scrapy的一个主要优势:请求是 异步调度与处理的。
这意味着Scrapy不须要等待请求完成和处理,它能够在此期间发送另外一个请求或执行其余操做。
这也意味着即便某些请求失败或在处理错误时发生错误,其余请求也能够继续运行。
虽然这使得咱们可以进行很是快速的爬网(以容错的方式同时发送多个并发请求),但Scrapy还能够经过一些设置让咱们的蜘蛛以更加绅士的方式去爬网。
咱们能够执行如下操做:在每一个请求之间设置下载延迟,限制每一个域或每一个IP的并发请求数量,甚至使用自动限制扩展,以尝试自动解决这些问题。
注意:咱们在这里使用的是Feed导出生成JSON文件,除此以外咱们还能够轻松更改导出格式(例如XML或CSV),存储于后端服务(例如FTP或Amazon S3),还能够编写 item pipeline 用以将 items 存储在数据库中。
运行流程小结:
经过上述实践,咱们已经了解了如何使用Scrapy从网站中提取和存储项目,但这只是表面。
Scrapy提供了许多强大的功能,能够帮助咱们轻松高效地进行抓取,例如:
内置支持使用扩展的CSS选择器和XPath表达式,让咱们能够高效地从HTML / XML源代码中选择和提取数据,并使用正则表达式提取辅助方法;
提供交互式Shell控制台(支持IPython),用于尝试使用CSS和XPath表达式来抓取数据,在编写或调试蜘蛛时很是有用;
内置支持以多种格式(JSON,CSV,XML)生成Feed导出并将其存储在多个后端服务(FTP、S三、数据库、本地文件系统)中;
强大的编码支持和自动检测,用于处理外部,非标准和损坏的编码声明;
强大的可扩展性支持,容许使用Signals(信号)和定义良好的API(中间件,扩展和 管道)插入本身的自定义功能;
诸多的内置扩展和中间件用于处理:
一个Telnet控制台,用于链接到Scrapy进程内运行的Python控制台,用以调试爬虫;
还有其余好东西,好比可重复使用的蜘蛛,能够从Sitemaps(站点地图:网站管理员向搜索引擎通知可用于爬行的网站页面的一种简单方法。)和XML / CSV Feed中抓取网站,自动下载与抓取项目相关联的图像(或任何其余媒体)的媒体管道,缓存DNS解析器等等!
接下来的步骤是安装Scrapy, 按照教程学习如何建立一个完整的Scrapy项目。感谢加入社区,谢谢你们的关注!
原文连接:
0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)
(完)