无法抓取评论后的内容Python BeautifulSoup

时间:2018-02-18 20:55:42

标签: python html web-scraping beautifulsoup comments

我正试图从以下页面中删除表格:

https://www.baseball-reference.com/boxes/CHA/CHA193805220.shtml

当我到达击球表的html时,我遇到一个很长的评论,其中包含表格的html

<div id="all_WashingtonSenatorsbatting" class="table_wrapper table_controls">
     <div class="section_heading">
     <div class="section_heading_text">
     <div class="placeholder"></div>
     <!-- 
        <div class="table_outer_container">
        .....
        -->
     <div class="table_outer_container mobile_table">
     <div class="footer no_hide_long">

最后两个div是我感兴趣的内容,而<!---->之间的所有内容都恰好包含了该表的副本table_outer_container以下课程。

问题在于,当我将页面源读入美丽的汤时,在包含所有内容的table_wrapperdiv中的评论之后,它不会读取任何内容。以下代码说明了问题:

batting = page_source.find('div', {'id':'all_WashingtonSenatorsbatting'})
divs = batting.find_all('div')
len(divs)

给了我

Out[1]: 3

div元素下显然有5个div id="all_WashingtonSenatorsbatting"个孩子。

即使我使用

提取评论
from bs4 import Comment
for comments in soup.findAll(text=lambda text:isinstance(text, Comment)):
     comments.extract()

生成的汤仍然不包含我想要刮去的最后两个div元素。我试图使用正则表达式使用代码,但到目前为止没有运气,任何建议?

1 个答案:

答案 0 :(得分:0)

我找到了可行的解决方案,通过使用以下代码我提取注释(它带来了我想要抓取的最后两个div元素),在BeautifulSoup中再次处理它并刮掉表

s = requests.get(url).content
soup = BeautifulSoup(s, "html.parser")
table = soup.find_all('div', {'class':'table_wrapper'})[0]
comment = t(text=lambda x: isinstance(x, Comment))[0]
newsoup = BeautifulSoup(comment, 'html.parser')
table = newsoup.find('table')

我花了一些时间来讨论这个问题并且有兴趣看看是否有人提出任何其他解决方案或者可以解释这个问题是如何形成的。