我的抓取工具抓不到内容

时间:2018-07-08 14:02:27

标签: python regex python-3.x web-scraping

我已经结合python模块和re模块编写了一个脚本,用于解析网页中的某些内容。我想解析的内容:其中有些周围有空格,有些则没有。如何将它们全部包含在一个模式中。我尝试过的那个只能抓住周围有空格的地方。我使用正向后看和正向前看来获取它们。

我想使用正则表达式从下面的asked中抓取文本html elements

import re

content = """
<div class="user-action-time">
          asked <span title="2018-07-08 09:43:08Z" class="relativetime">2 hours ago</span>
    </div>

<div class="user-action-time">asked<span title="2018-07-07 17:17:07Z" class="relativetime">18 hours ago</span>
    </div>

<div class="user-action-time">
          asked <span title="2018-07-06 20:35:48Z" class="relativetime">yesterday</span>
    </div>
"""
pattern = re.compile(r'(?<=user-action-time">\s)(.*)(?=<span)')
for item in pattern.finditer(content):
    print(item.group())

3 个答案:

答案 0 :(得分:1)

在我的示例中,我提取了整个div的文本内容,以及如何仅提取div内部span的内容。我建议使用某种HTML解析器。我在示例中使用了lxml html,但还有很多其他方法。

nvidia-smi

答案 1 :(得分:0)

由于您想从字符串中捕获一个单词,即“询问”,因此,如果您一直希望抓住一个单词,则以下内容应该起作用

输入(在底部的打印语句中)

import re
content = """
<div class="user-action-time">
          asked <span title="2018-07-08 09:43:08Z" class="relativetime">2 hours 
ago</span>
    </div>

<div class="user-action-time">asked<span title="2018-07-07 17:17:07Z" 
class="relativetime">18 hours ago</span>
    </div>

<div class="user-action-time">
          asked <span title="2018-07-06 20:35:48Z" 
class="relativetime">yesterday</span>
    </div>
"""


print(re.findall('<div[\S\s]*?>[\s]*([\S]+?)[\s<]+', content))

输出

['asked', 'asked', 'asked']

现在,如果您需要捕获一个句子,则必须对正则表达式进行一些修改(我正在使用的正则表达式很脏,但是很有效-再次出现细微差别,具体取决于内容字符串,影响其性能)

输入句子(在底部的打印语句中)

import re
content = """
<div class="user-action-time">
          asked my friend <span title="2018-07-08 09:43:08Z" 
class="relativetime">2 hours 
ago</span>
    </div>

<div class="user-action-time">asked my dad<span title="2018-07-07 17:17:07Z" 
class="relativetime">18 hours ago</span>
    </div>

<div class="user-action-time">  asked my mom <span title="2018-07-07 17:17:07Z" 
class="relativetime">18 hours ago</span>
    </div>

<div class="user-action-time">
          asked <span title="2018-07-06 20:35:48Z" 
class="relativetime">yesterday</span>
    </div>
"""


print(re.findall('<div[\S\s]*?>[\s]*([\S\s]+?[\S])[\s]*[<]+', content))

输出

['asked my friend', 'asked my dad', 'asked my mom', 'asked']

答案 2 :(得分:0)

似乎我自己做了。这就是我想要得到的:

pattern = re.compile('(?<=user-action-time">)(\s*?.*)(?=<span)')
for item in pattern.finditer(content):
    print(item.group().strip())

输出:

asked
asked
asked