我在论坛网站上抓桌子时遇到一些困难(每页50行)。我编写的代码适用于95%的内容,但是当存在粗体或斜体的行时会添加一个表格中断,但我没有得到完整的结果
大多数网页都有这样的标签:
<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 :(得分:1)
由于您已经注意到<b><i>..</b></i>
出现故障,因此格式错误的HTML。 html.parser
无法处理这项工作。我已经针对您的测试用例尝试了lxml
,但它确实有效。
soup = BeautifulSoup(content, "lxml")