限制BeautifulSoup输出

时间:2016-02-17 09:17:45

标签: python html beautifulsoup

我已经与BeautifulSoup和Selenium成功合作了几个星期了。然而,我发现自己陷入了无法解开的境地。

我需要从表格的前6行左右提取html。这些行不共享任何类,ID或类似。

表格结构:

  <table class="Table">
    <tr class="Table_Header">
        <td colspan="2">Some Text</td>
    </tr>
    <tr>
        <td class="Class2">Some Text</td>
        <td><span class="Class"></span>Some Text</td>
    </tr>
    <tr>
        <td class="Class2">Some Text</td>
        <td>Some Text</td>
    </tr>
    <tr>
        <td class="Class2">Some Text</td>
        <td>Some Text</td>
    </tr>

    <tr class="Class3">
        <td class="Class2"> Some Text </td>
        <td>Some Text</td>
    </tr>   
        <tr class="Class3">
            <td class="Class2">Some Text</td>
            <td>Some Text</td>
        </tr>   
        <tr>
            <td class="Class2">Some Text</td>
            <td>            <div class="Class4">Some Text</div>
            <div class="Class4">Some Text</div>
</td>
        </tr>

这个表一直在继续,保持着这种结构,但看似随机的类弹出。

基本上我需要返回前六个tr。我已经尝试了几种返回整个表或单个tr的方法。

有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

所以你试图从表中获得前6个tr?如果我正确地理解了这个问题,那么我有一个类似的问题,我需要获得第一个400 td。也许下面的代码会有帮助吗?

也许像

for row in get_log().findAll('tr'):
    for cell in row.findAll('td'):
        print (cell.text)
        logfile.write('{}\n'.format(cell.text))
        i += 1
    if i == 400:
        break

另外,让我指出你用来解决我自己的问题的文章,好的东西接近尾声,因为它假设你几乎什么都不知道。 https://first-web-scraper.readthedocs.org/en/latest/

编辑: 使用布恩县的表作为来源:

import requests
from BeautifulSoup import BeautifulSoup

url = 'http://www.showmeboone.com/sheriff/JailResidents/JailResidents.asp'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html)
table = soup.find('table', attrs={'class': 'collapse shadow BCSDTable'})

i = 0
for row in table.findAll('tr'):
    print (row.prettify())
    i += 1
    print i
    if i == 6:
        break

这会输出大量信息,所以我不会发布它。也许你想在每个tr中改进你想要的东西?