【问题标题】:Get Text outside of tags as well获取标签之外的文本
【发布时间】:2015-04-07 22:45:22
【问题描述】:

我正试图从一个糟糕透顶的网站中获取一些文本。 这是我被难住的部分:

    <tr><td valign="top">
                    <br>
                    <b>AGFA&nbsp;ACCUSET,&nbsp;<i>1994</i></b>&nbsp;<font color=grey>(46965)</font><br>
                    <br>
                    <b>Equipements : </b><br>AGFA 9800<br>
WITH RIP VIPER N°2<br>
FILM PROCESSOR GLUNZ AND JENSEN ML35 n°26498<br>
(LAIZE 450/600mm)<br>
Spectraset 2200<br>
                    <b>Availability : </b>IMMEDIATE<br></td><tr>

我需要的是里面的所有文字,所以

爱克发 ACCUSET,1994 年 (46965)

设备:AGFA 9800

与 RIP VIPER N°2

胶片处理器 ​​GLUNZ 和 JENSEN ML35 n°26498

(莱泽450/600mm)

光谱集 2200

可用性:立即

如您所见,有些文本在&lt;b&gt;-tags 内,有些在&lt;br&gt;-tags 的前面。如果我使用soup.getText(),我会得到标签之外的文本,但我也会得到很多我不想要的其他文本,所以这真的不起作用。

编辑:This 是相关网站的链接。

EDIT2:原来我使用了错误的解析器。有关详细信息,请参阅下文。

【问题讨论】:

    标签: python html python-3.x beautifulsoup html-parsing


    【解决方案1】:

    我认为get_text() 没有问题:

    >>> from bs4 import BeautifulSoup
    >>> 
    >>> data = """
    ... <tr><td valign="top">
    ...                     <br>
    ...                     <b>AGFA&nbsp;ACCUSET,&nbsp;<i>1994</i></b>&nbsp;<font color=grey>(46965)</font><br>
    ...                     <br>
    ...                     <b>Equipements : </b><br>AGFA 9800<br>
    ... WITH RIP VIPER N°2<br>
    ... FILM PROCESSOR GLUNZ AND JENSEN ML35 n°26498<br>
    ... (LAIZE 450/600mm)<br>
    ... Spectraset 2200<br>
    ...                     <b>Availability : </b>IMMEDIATE<br></td><tr>
    ... """
    >>> 
    >>> soup = BeautifulSoup(data)
    >>> print(soup.tr.td.get_text())
    
    
    AGFA ACCUSET, 1994 (46965)
    
    Equipements : AGFA 9800
    WITH RIP VIPER N°2
    FILM PROCESSOR GLUNZ AND JENSEN ML35 n°26498
    (LAIZE 450/600mm)
    
    Spectraset 2200
    Availability : IMMEDIATE
    

    这是使用您分享的链接的演示:

    >>> from bs4 import BeautifulSoup
    >>> import requests
    >>> 
    >>> url = "http://agec.de/index.asp?a=1&lg=de&macnum=46965"
    >>> 
    >>> response = requests.get(url)
    >>> soup = BeautifulSoup(response.content)
    >>> 
    >>> soup.select('section#main_section aside#machine_detail form > table > tr')[1].get_text()
    
    
    AGFA ACCUSET, 1994 (46965)
    
    Equipements : AGFA 9800
    WITH RIP VIPER N°2
    FILM PROCESSOR GLUNZ AND JENSEN ML35 n°26498
    (LAIZE 450/600mm)
    Spectraset 2200
    Availability : IMMEDIATE
    

    【讨论】:

    • 我已经尝试过类似的方法。可悲的是,这个结果什么也没返回。这可能是因为网站的构建方式很奇怪。如果您有兴趣查看,这里是整页的link。但请注意:它很丑。
    • 感谢您的快速回复!可悲的是,当我得到一个IndexError: list index out of range 时,这似乎仍然返回一个空对象,即使我在 Python 解释器中逐步执行完全相同的代码。
    • @FreshPrince 明白了,这可能是一个单独的问题,因为 bs 在底层使用的解析器之间存在差异。尝试改用soup = BeautifulSoup(response.content, 'html.parser')。让我知道它是否有帮助。
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多