【问题标题】:Extract Paragraph Data without any tags提取没有任何标签的段落数据
【发布时间】:2017-03-25 17:42:19
【问题描述】:

我写了一个 scraperscraper 从网站上删除数据,但不幸的是网站上的数据不一致。有时该段落是使用<p> 标签编写的,有时不是。 (下面给出的代码片段) 有什么动态的方法知道吗?

产生错误的部分代码

main_content = soup.findAll("div", {"class": "story-detail"})
content = ""
for div in main_content:
    links = div.findAll('p')
    for a in links:
        a = str(a).strip('<p>')
        a = str(a).strip('/>')
        a = str(a).strip('<')
        a = str(a).strip('<br>')
        content = content + a

【问题讨论】:

    标签: python web-scraping beautifulsoup web-crawler


    【解决方案1】:

    您可以通过text 属性获取所有文本。在这种情况下,您无需担心底层结构。

    例子:

    >>> soup = Soup(first, 'html.parser')
    >>> soup
    <div class="story-detail">test</div>
    
    >>> soup.find('div').text
    'test'
    >>> soup = Soup(second, 'html.parser')
    >>> soup
    <div class="story-detail">another <p>test</p></div>
    
    >>> soup.find('div').text
    'another test'
    

    【讨论】:

    • 这很好,但我希望特定类中的文本不是来自所有 div
    • @AsadMahmood 这只是一个例子。您仍然可以按类或其他属性进行查询。重点是获取所有底层文本,无论那里有什么元素。
    【解决方案2】:

    如果您想要完成的是从您的文本中删除所有 &lt;p&gt;&lt;/p&gt; 标记,我将使用如下正则表达式:

    main_content = ["a div without p tags", "<p>a div with p tags</p>"]
    
    import re
    
    for i in range(0,len(main_content)):
       main_content[i] = re.sub("<p>|</p>","",main_content[i])
    

    【讨论】:

    • 但是如果数据文本没有

      标签怎么办。比如

      这里是一个没有标签的文本
    • 在这种情况下你需要做什么?我的示例将返回:
      这是没有标签的文本
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多