我使用Scrapy抓取网站,其上有产品清单。我想要做的是使用正则表达式从产品标题字符串中删除不需要的单词。我想删除2个不同的重复单词:笔和石墨铅笔,仅清除品牌名称。
有什么建议吗?
<a name=“this-link”> href=“some url here”>Pen Bic Crystal</a>
some divs and other DOM structure
<a name=“this-link”> href=“some url here”>Graphite Pencil Kohinoor Carpenter</a>
some divs and other DOM structure
<a name=“this-link”> href=“some url here”>Pen Parker Jotter</a>
some divs and other DOM structure
<a name=“this-link”> href=“some url here”>Pen Bic Other Model</a>
some divs and other DOM structure
<a name=“this-link”> href=“some url here”>Graphite Pencil Palomino Blackwing Pearl</a>
答案 0 :(得分:4)
Scrapy选择器内置support for regular expressions。
获取链接文本后致电re()
:
sel.xpath('//a/text()').re(r'(?:Pen|Graphite Pencil)\s(.*)')
其中:
sel
是您的Selector
实例(?:Pen|Graphite Pencil)
是non-capturing group (.*)
是capturing group UPD:
如果您想在Pen
或Graphite Pencil
之后只获取以下字词,请使用此正则表达式:r'(?:Pen|Graphite Pencil)\s(\w+)
,其中只有字母数字(和_
)字符集在Pen
或Graphite Pencil
和空格后捕获。
使用scrapy shell
进行演示:
$ scrapy shell index.html
>>> sel.xpath('//a/text()').re(r'(?:Pen|Graphite Pencil)\s(\w+)')
[u'Bic', u'Kohinoor', u'Parker', u'Bic', u'Palomino']