2017-05-24 147 views
1

我在从论坛网站(每页50行)刮取表格时遇到了一些困难。正如我写的代码所写,95%的内容可以工作,但在粗体或斜体线出现时会添加表格中断,但我无法获得完整结果从BeautifulSoup对象中删除标签

大多数页面都有类似这样的标签:

<table> 
    <td> 
    content_1 
    </td><td> 
    content_2 
    </td><td> 
    content_3 
    </td> 
    ... 
</table> 

虽然当粗体或斜体短语存在时,无论出于何种原因随机标签添加和我只用元件的数量,直到标签结束。

<table> 
    <td> 
    content_1 
    </td><td> 
     <b><i>content_2</b></i> *</table>* 
    </td><td> 
    content_3 
    </td> 
... 
</table> 

我不确定为什么这个标签出现(当我检查网页上的元素时,它不会出现)。

有没有人有任何建议如何处理这个?我有一些想法,但他们都没有解决。

  • 转换的beautifulsoup对象的字符串,然后删除标记,并转换回beautifulsoup - 还没有完全还没有工作,但似乎有点过多,会减慢程序...

  • 只是跳过汤和使用pd.read_html - 还没有得到它的工作。

或者如果有人对替代方法有任何建议,我们将不胜感激。谢谢!

编辑 - 计算它会帮助,如果我只是添加我的代码。如果主块有三个例子。首先不提供结果,其次是部分结果,第三是完整结果。

def get_page(URL): 
    ''' 
    INPUT: url 
    OUTPUT: pandas dataframe with message board info 
    ''' 
    content = requests.get(URL).content 
    soup = BeautifulSoup(content, "html.parser") 
    rows = list(soup.find('table', id="ctl00_CP1_gv")) 
    table_lst = [] 
    for row in rows[2:-2]: 
     cell_lst = [cell for cell in list(row)[1:5]] 
     table_lst.append(cell_lst) 
    return pd.DataFrame(table_lst) 

if __name__ == '__main__': 
    url1 = "https://investorshub.advfn.com/Cal-Bay-International-Inc-CBYI-5520/?NextStart=35092" 
    url2 = "https://investorshub.advfn.com/Cal-Bay-International-Inc-CBYI-5520/?NextStart=35099" 
    url3 = "https://investorshub.advfn.com/Cal-Bay-International-Inc-CBYI-5520/?NextStart=1000" 
    df1 = get_page(url1) 
    df2 = get_page(url2) 
    df3 = get_page(url3) 
+0

“......但是在出现粗体或斜体的行时会中断...”请显示打破的代码和错误消息(如果有的话)。 – DyZ

+0

道歉,'打破',是错误的词选择。它只是不提供其他页面提供的完整结果。我将代码添加为示例页面...... – schustda

+0

该webite很混乱......您能澄清一下您试图获得的那些网站的哪一部分,可能会有更好的标签可用吗? – Tony

回答

1

正如你已经注意到<b><i>..</b></i>是坏的,因此HTML格式不正确。 html.parser无法处理这项工作。我已经试过lxml针对你的测试用例,它工作。

soup = BeautifulSoup(content, "lxml") 
+0

看起来像是做到了。谢谢!我倾向于总是默认为html.parser。 – schustda