【问题标题】:removing words from string using regex使用正则表达式从字符串中删除单词
【发布时间】:2014-06-21 19:55:33
【问题描述】:

我正在使用带有产品列表的 Scrapy 抓取网站。我想要做的是使用正则表达式从产品标题字符串中删除不需要的单词。我想删除 2 个不同的重复词:PenGraphite Pencil,只刮掉品牌名称。

有什么建议吗?

<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>

【问题讨论】:

    标签: python html regex web-scraping scrapy


    【解决方案1】:

    Scrapy 选择器内置了support for regular expressions

    获取链接文本后拨打re()

    sel.xpath('//a/text()').re(r'(?:Pen|Graphite Pencil)\s(.*)')
    

    地点:

    更新:

    如果您只想获取PenGraphite Pencil 之后的以下单词,请使用此正则表达式:r'(?:Pen|Graphite Pencil)\s(\w+),其中在Pen 或@ 之后仅捕获一组字母数字(和_)字符987654337@ 和一个空格。

    使用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']
    

    【讨论】:

    • 非常感谢@alecxe。是否有机会在您的答案中添加其他正则表达式,例如删除这 2 个并仅过滤以下单词?喜欢只有 Parker 还是 Bic?
    • @ikechi 是的,当然,让我做一个演示。
    • 谢谢,太好了。现在正在通过正则表达式语法,例如,如果我想抓取模型名称,如 Kohinoor Carpenter 或 Crystal,这可以工作吗? sel.xpath('//a/text()').re(r'(?:Pen|Graphite Pencil)\s('\s+(.*)$') 抱歉,我现在不在工作电脑上测试它,可以在 2-3 小时后应用。
    • @ikechi 好的,如果型号名称是PenGraphite Pencil 之后的所有内容,那么您应该使用(?:Pen|Graphite Pencil)\s(.*)
    • 抱歉,我不清楚:移除钢笔和石墨铅笔并跳过品牌。在第一种情况下,正则表达式只获取品牌。在其他情况下,正则表达式会抓取品牌名称之后的所有内容,即只有型号名称。品牌总是在钢笔或石墨铅笔之后。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2022-01-27
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2013-05-23
    • 2021-08-07
    相关资源
    最近更新 更多