Scrapy:从HTML而不是从URL中删除项目

时间:2016-07-22 09:31:05

标签: scrapy scrapy-spider scrapyd scrapy-pipeline scrapy-shell

我遇到Scrapy需要爬行和刮擦两者。但根据应用要求,我决定不采用Monolithic方法。一切都应该以服务为基础。所以我决定设计两种服务。

  1. 获取所有网址和HTML。上传到s3。
  2. 从html中删除项目
  3. 为什么呢?很简单,今天我决定废弃10件物品,明天我要废20件(申请要求)。在这种情况下,我不想再次抓取url和html,因为html将是相同的(我只抓取博客网站,其中只添加评论,内容保持相同的每个网址)。

    第一项服务将基于Scrapy。如果我们可以提供html而不是start url,或者我们必须使用BeatifulSoap或其他一些抓取库,我正在寻找是否可以使用相同的抓取。

1 个答案:

答案 0 :(得分:1)

Scrapy选择器(允许从HTML / XML中提取数据)现在打包为一个名为parsel的独立项目。

如果您可以提供从S3到parsel.Selector的Unicode HTML字符串,则可以执行与常规"相同的数据提取。现场scrapy项目。

来自the docs的示例:

>>> from parsel import Selector
>>> sel = Selector(text=u"""<html>
        <body>
            <h1>Hello, Parsel!</h1>
            <ul>
                <li><a href="http://example.com">Link 1</a></li>
                <li><a href="http://scrapy.org">Link 2</a></li>
            </ul
        </body>
        </html>""")
>>>
>>> sel.css('h1::text').extract_first()
u'Hello, Parsel!'
>>>
>>> sel.css('h1::text').re('\w+')
[u'Hello', u'Parsel']
>>>
>>> for e in sel.css('ul > li'):
        print(e.xpath('.//a/@href').extract_first())
http://example.com
http://scrapy.org