如何使用 PyQuery 从表中获取文本?
How do I get text from tables using PyQuery?
首先我应该说我没有经常使用 pyquery,所以这个问题可能很简单,但我已经尝试了很多东西并且被卡住了。
我正在使用 PyQuery 从 table 获取信息。这是我的 table:
的开头
<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
显然我不想要 'None',因为它不正确。我尝试了 thead tr td div
的各种组合,但后来我没有得到我得到的组合。然后我尝试首先列出 div 个列表并通过它们进行计数以组合列表,但它看起来超级 hacky 而且我也没有得到 Wonderlic。此外,文档似乎说要使用 text()
,但是当我尝试添加括号时,我得到 TypeError: 'NoneType' object is not callable。任何见解将不胜感激。
谢谢!
您的代码能够读取所有标签并打印标签的值(真或假)。试试这个可能会有帮助。
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
事实证明,您必须将 .items() 添加到查询的末尾才能获取 pyquery 项目而不是 htmlelements。一旦我这样做了,像 c.text() 这样的事情就起作用了,而不是抛出错误。
columns = [c.text() for c in table('thead tr td').items()]
这要好得多,因为它按预期使用了 pyquery api。
首先我应该说我没有经常使用 pyquery,所以这个问题可能很简单,但我已经尝试了很多东西并且被卡住了。
我正在使用 PyQuery 从 table 获取信息。这是我的 table:
的开头<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
显然我不想要 'None',因为它不正确。我尝试了 thead tr td div
的各种组合,但后来我没有得到我得到的组合。然后我尝试首先列出 div 个列表并通过它们进行计数以组合列表,但它看起来超级 hacky 而且我也没有得到 Wonderlic。此外,文档似乎说要使用 text()
,但是当我尝试添加括号时,我得到 TypeError: 'NoneType' object is not callable。任何见解将不胜感激。
谢谢!
您的代码能够读取所有标签并打印标签的值(真或假)。试试这个可能会有帮助。
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
事实证明,您必须将 .items() 添加到查询的末尾才能获取 pyquery 项目而不是 htmlelements。一旦我这样做了,像 c.text() 这样的事情就起作用了,而不是抛出错误。
columns = [c.text() for c in table('thead tr td').items()]
这要好得多,因为它按预期使用了 pyquery api。