如何使用PyQuery从表中获取文本?

时间:2016-12-30 08:30:04

标签: html python-2.7 pyquery

我应该首先说我没有多使用pyquery,所以这个问题可能很简单,但我已经尝试了很多东西而且卡住了。

我正在使用PyQuery从表中获取信息。这是我表的开头:

<table class="sortable" border="1" cellspacing="1" cellpadding="1" bordercolor="#333333">
    <thead>
        <tr class="headerfont">
            <td><div align="center">Year</div></td>
            <td><div align="center">Name</div></td>
            <td><div align="center">College</div></td>
            <td><div align="center">POS</div></td>
            <td align="center"><div align="center">Height <span style="font-size:10px;">(in)</span></div></td>
            <td align="center"><div align="center">Weight <span style="font-size:10px;">(lbs)</span></div></td>
            <td>Hand Size <span style="font-size:10px;">(in)</span></td>
            <td>Arm Length <span style="font-size:10px;">(in)</span></td>
            <td><div align="center"><span style="font-size:14px;">Wonderlic</span></div></td>
            <td><div align="center">40 <span style="font-size:12px;">Yard</span></div></td>
            <td><div align="center"><span style="font-size:12px;">Bench Press</span></div></td>
            <td style="font-size:14px;"><div align="center">Vert Leap <span style="font-size:10px;">(in)</span></div></td>
            <td style="font-size:14px;"><div align="center">Broad Jump <span style="font-size:10px;">(in)</span></div></td>
            <td>Shuttle</td>
            <td>3Cone</td>
            <td>60Yd Shuttle</td>
        </tr>
    </thead>
    <tbody>

它继续在最后一行之后,但这就是所有内容。所以,如果我跑:

from pyquery import PyQuery as pq
table = pq(*stuff above*)
for c in table('thead tr td'):
    print c.text

我明白了:

None
None
None
None
None
None
Hand Size 
Arm Length 
None
None
None
None
None
Shuttle
3Cone
60Yd Shuttle

显然我不想要'无',因为它不正确。我尝试了thead tr td div的各种组合,但后来我得不到我得到的那些。然后我尝试先制作一个div列表,并通过它们来组合列表,但它似乎超级hacky而且我也没有得到Wonderlic。此外,文档似乎说要使用text(),但是当我尝试添加parens时,我得到 TypeError:'NoneType'对象不可调用。任何见解将不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:1)

您的代码能够读取所有标签并打印标签的值,无论是真还是假。试试这可能有所帮助。

from pyquery import PyQuery as pq
table = pq(*stuff above*)
for c in table('thead tr td'):
   if c.text == True:
       print c.text
   else:
       continue

答案 1 :(得分:0)

事实证明,你必须在查询结尾添加.items()来获取pyquery项而不是htmlelements。一旦我做了这样的事情,比如c.text()工作而不是抛出错误。

columns = [c.text() for c in table('thead tr td').items()]

这更好,因为它按预期使用了pyquery api。

相关问题