Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当表格列中有文本时,为什么没有?_Python_Html_Web Scraping_Html Parsing_Beautifulsoup - Fatal编程技术网

Python 当表格列中有文本时,为什么没有?

Python 当表格列中有文本时,为什么没有?,python,html,web-scraping,html-parsing,beautifulsoup,Python,Html,Web Scraping,Html Parsing,Beautifulsoup,我在用漂亮的汤拉屎。我是新手 问题1: 这是表格: <table width="75%" align=center> <tr> <td><STRONG><font face="Arial" size=2>S.No:</font></STRONG></td> <td><font face="Arial" size=2> 1635925<

我在用漂亮的汤拉屎。我是新手

问题1: 这是表格:

<table width="75%" align=center>
    <tr>
        <td><STRONG><font face="Arial" size=2>S.No:</font></STRONG></td>
        <td><font face="Arial" size=2> 1635925</font></td>
    </tr>
    <tr>
        <td><FONT size=2><STRONG><font face="Arial">Name:</font><br></STRONG></FONT></td>
        <td><font face="Arial" size=2> <b>Alex</b></font></td>
    </tr>
    <tr>
        <td><STRONG><font face="Arial" size=2>Dog's Name:</font></STRONG></td>
        <td><font face="Arial" size=2> Tiger</font></td>
    </tr>
    <tr>
        <td><STRONG><font face="Arial" size=2 >Cat's Name:</font></STRONG></td>
        <td><font face="Arial" size=2>Pussy</font></td>
    </tr>
</table>
以下是输出:

S.No:  1635925
None None
Dog's Name:  Tiger
Cat's Name: Pussy
问题是第2行,为什么两列都打印
None

问题2:与上述问题类似

  <tr bgcolor="#ffffff">
    <td align="middle"><font face="Arial" size=2>503</font></td>
    <td align="left"><font face="Arial" size=2>Text1</font></td>
    <td align="left"><font face="Arial" size=2>---</font></td>
    <td align="middle"><font face="Arial" size=2>2</font></td>
  </tr>  

   <tr bgcolor="#e6e6fa">
          <td colspan=4><font face="Arial" size=2>&nbsp;&nbsp;some random text</font></td>
   </tr>
   <tr >
    <td align="middle"><font face="Arial" size=2>048</font> </td>
    <td align="left"><font face="Arial" size=2>Text 2</font></td>
    <td align="left"><font face="Arial" size=2>187 &nbsp;&nbsp;&nbsp;&nbsp;</font></td>
    <td align="middle"><font face="Arial" size=2>2</font></td>
  </tr>
输出:

503 Text1 --- 2
None Text2 187     2

为什么第一列的文本是
None
而不是
048

尝试
text
而不是
string
。例如:

for row in soup('table')[4]('tr'):
  tds = row('td')
  print tds[0].text, tds[1].text
印刷品:

S.No:  1635925
Name:  Alex
Dog's Name:  Tiger
Cat's Name: Pussy
根据,如果元素有多个子元素,
string
变为
None

为方便起见,如果标记只有一个子节点,且该子节点 节点是字符串,子节点作为tag.string可用,如下所示 以及tag.contents[0]


问题是第二行的
td
元素不包含包含字符串内容的单个元素;它们包含其中两个。因此,
string
没有明确的值,因此返回
None

如果将其分解为多个部分,则可以看到:

>>> table = s('table')[4]
>>> row = table('tr')[1]
>>> col = row('td')[0]
>>> font = col('font')[0]
>>> strong = font('strong')[0]
>>> font2 = strong('font')[0]
>>> strong
<strong><font face="Arial">Name:</font><br/></strong>
>>> strong.string
>>> font2
<font face="Arial">Name:</font>
>>> font2.string
u'Name:'

值得注意的是,您试图处理的HTML非常混乱,混合了HTML3中不推荐、HTML4中删除的HTML2特性,以及在3或4中添加的特性。如果你想学习
BeautifulSoup
,那么从解析一个有效的HTML4页面开始可能会容易得多,只有在你更好地理解事物之后才能尝试学习如何处理糟糕的HTML。令人惊讶的是,
.text
似乎比
.string
@claws]快得多。这有点令人惊讶。我有点好奇为什么,但是…还不足以深入到源头。
S.No:  1635925
Name:  Alex
Dog's Name:  Tiger
Cat's Name: Pussy
>>> table = s('table')[4]
>>> row = table('tr')[1]
>>> col = row('td')[0]
>>> font = col('font')[0]
>>> strong = font('strong')[0]
>>> font2 = strong('font')[0]
>>> strong
<strong><font face="Arial">Name:</font><br/></strong>
>>> strong.string
>>> font2
<font face="Arial">Name:</font>
>>> font2.string
u'Name:'
>>> strong.text
u'Name:'
>>> font.text
u'Name:'
>>> col.text
u'Name:'