0

有人可以告诉我如何从<td>. 我编写了以下代码来检索结果,如下所示。我能够检索到的值 until <td>。我不确定如何进一步检索。

请注意有很多<tr>值。我刚才举了两个例子。

我的代码:

from bs4 import BeautifulSoup
import urllib2
url="http://mywebsite.com/"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

records = [] 
tabledata = soup.find("table", {"class" : "class1"})
for row in tabledata.findAll('tr'):
    col = row.findAll('td')
    if col:
        col1 = col[1].string.strip()
        col2 = col[2].string.strip()
        col3 = col[3].string.strip()
        record = '%s %s %s' % (col1,col2,col3)
        records.append(record)


for values in records:
    print values

数据

<table class="class1">
<tr>
<th></th>
<th>Heading1</th>
<th>Heading2</th>
<th>Heading3</th>
</th>
</tr>
<tr>
<td><img src="http://image.com/new.png"/></td>
<td>Data1</td>
<td><a href="www.sample.com">Data2</a></td>
<td>Data3</td>
</tr>

输出:

Data1 Data2 Data3

所需输出:

Data1 Data2 Data3 www.sample.com new.png
4

2 回答 2

0

string 属性只会返回最有可能的子节点的文本内容。您还需要从每个 col 中查找您感兴趣的其他标签 ( 和 ),并从要打印的标签中提取属性。

于 2013-08-22T10:28:54.173 回答
0

这是解决方案:

from bs4 import BeautifulSoup
import urllib2
#url="http://mywebsite.com/"
#page=urllib2.urlopen(url)


def getdata(col):
    record = []
    for image in col.findAll('img'):
        src = image.get('src')
        record.append(src)
    for a in col.findAll('a'):
        href = a.get('href')
        record.append(href)
    if col.string:
        record.append(col.string.strip())
    return record


def extract():
    url="test.html"
    soup = BeautifulSoup(open(url).read())

    records = [] 
    tabledata = soup.find("table", {"class" : "class1"})
    for row in tabledata.findAll('tr'):
        cols = row.findAll('td')
        for col in cols:
            record = getdata(col)
            records.extend(record)
    return records

if __name__ == "__main__":
    records = extract()
    print "recorsd:", records
    for v in records:
        print v

输出:

http://image.com/new.png
Data1
www.sample.com
Data2
Data3

循环遍历所有“td”,提取必要的数据并附加到记录中。

于 2013-08-22T10:36:01.300 回答