拾取(next_siblings)文本

时间:2014-02-05 09:08:47

标签: python beautifulsoup

(环境:Python 2.7 + BeautifulSoup 4.3.2)

目的:在代码中选取文本“2009年1月23日下午12:05”。

因为公司网站上的网页需要登录和重定向,所以我将目标网页的源代码复制到一个文件中,并将其保存为C:\中的“example.html”,以方便练习。

这是原始代码的一部分:

<tr class="ghj">
  <td>
    <span class="city-sh">
      <sh src="./citys/1.jpg" alt="boy" title="boy" />
    </span>
    <a href="./membercity.php?mode=view&amp;u=12563">port_new_cape</a>
  </td>
  <td class="position">
      <a href="./search.php?id=12563&amp;sr=positions"
        title="Search positions">452</a>
  </td>
  <td class="details">
      <div>South</div>
  </td>
  <td>May 09, 1997</td>
  <td>Jan 23, 2009 12:05 pm&nbsp;</td>
</tr>

到目前为止我编写的代码是:

url = r"C:\example.html"
page = open(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('td', {'class' : details}) 
sis = cities.find_next_siblings('td')

for s in sis:
    print s

我不知道如何直接拿起它以便路由兄弟姐妹。但是,当我运行它时,它会给出如下所示的错误消息,似乎无法识别兄弟姐妹。

Traceback (most recent call last):
File "C:/Python27/Last Activity mydyingbride.py", line 17, in <module>
sis = cities.find_next_siblings('td')
AttributeError: 'ResultSet' object has no attribute 'find_next_siblings'

以何种方式,我可以使用本地文件练习吗?

1 个答案:

答案 0 :(得分:1)

我建议你使用Python调试器来查看变量的当前值。无论如何,这是解决方案:

soup = BeautifulSoup(page.read())
cities = soup.find_all('td', {'class' : 'details'}) 
counter = 0
while len(cities) > counter:
    sis = cities[counter].find_next_siblings('td')

    for s in sis:
        print s

    counter += 1

输出是:

<td>May 09, 1997</td>
<td>Jan 23, 2009 12:05 pm </td>

回答,你的下一个问题。请参阅以下示例:

from bs4 import BeautifulSoup
html_doc = '''
<tr class="ghj">
    <td><span class="city-sh"><sh src="./citys/1.jpg" alt="boy" title="boy" /></span><a href="./membercity.php?mode=view&amp;u=12563">port_new_cape</a></td>
    <td class="position"><a href="./search.php?id=12563&amp;sr=positions" title="Search positions">452</a></td>
    <td class="details"><div>South</div></td>
    <td>May 09, 1997</td>
    <td>Jan 23, 2009 12:05 pm&nbsp;</td>
</tr>
<tr class="ghj">
    <td><span class="city-sh"><sh src="./citys/1.jpg" alt="boy" title="boy" /></span><a href="./membercity.php?mode=view&amp;u=12563">port_new_cape</a></td>
    <td class="position"><a href="./search.php?id=12563&amp;sr=positions" title="Search positions">452</a></td>
    <td class="details"><div>South</div></td>
    <td>May 09, 1997</td>
    <td>Jan 24, 2009 12:05 pm&nbsp;</td>
</tr>
<tr class="ghj">
    <td><span class="city-sh"><sh src="./citys/1.jpg" alt="boy" title="boy" /></span><a href="./membercity.php?mode=view&amp;u=12563">port_new_cape</a></td>
    <td class="position"><a href="./search.php?id=12563&amp;sr=positions" title="Search positions">452</a></td>
    <td class="details"><div>South</div></td>
    <td>May 09, 1997</td>
    <td>Jan 25, 2009 12:05 pm&nbsp;</td>
</tr>
'''
soup = BeautifulSoup(html_doc)
cities = soup.find_all('td', {'class' : 'details'}) 
counter = 0
while len(cities) > counter:
    datesColumn = cities[counter].find_next_siblings('td')
            # Assuming you are interested in second column of date
    if len(datesColumn) == 2:
        print datesColumn[1].string

    counter += 1

输出是:

Jan 23, 2009 12:05 pm 
Jan 24, 2009 12:05 pm 
Jan 25, 2009 12:05 pm