我对 Python 还很陌生,但到底是什么......这是一个奇怪的问题,所以我会尽我所能地解释它:
我正忙着尝试用 Python 编写一个脚本来检查网页的特定变化(基本上是从 0 翻转到 1 的数字)。当该更改发生时,脚本将继续执行其他操作。不幸的是,我还没有达到这一点,因为我什至在解析 HTML 时都遇到了麻烦,因为在BeautifulSoup
获取 HTML 时,很多 HTML 都丢失了!(至少,这是我声称的。)
让我们一步一步来:我正在使用BeautifulSoup
and Mechanize
。首先,我在网页上找到一个表单并选择它,根据需要更改表单中的控件。(我已经验证所有控件都按照我的预期进行了更改。)在此之后,我提交了表单,然后调用了一个我编写的辅助函数process_results()
:
...
form = list(client.forms())[1]
client.select_form('ttform');
...
# Modify controls
...
client.submit()
process_results(client)
process_results()
只是检查客户得到了什么。首先,根据表单中输入的内容,您可能会得到无效的搜索结果,所以我想搜索网页上显示的错误消息,看看它是否存在。我曾经BeautifulSoup
这样做:
# Processes search results.
def process_serach_results(cli):
html = cli.response().read()
soup = BeautifulSoup(html)
...
评估相关代码是否出现在页面上的语句如下所示:
...
if (soup.find('td', attr = {'class' : 'msgarea'}) != None):
# Do something...
...
这永远不会评估为真,因为它找不到我正在描述的标签。我决定直接从Mechanize
和打印出响应BeautifulSoup
,这就是我得到的(缩短):
Mechanize
打印我要查找的代码,这意味着响应正确返回:
...
<TD class=msgarea>
<B class=important_msg>There was a problem with your request:</B>
<BR>
<BR>
<li class=red_msg>...</li>
...
</TD></TR></TABLE><P></DIV>
...
这是显示的最后一段 HTML BeautifulSoup
:
...
<span class="pageheaderlinks">
<a ... > MENU </a>
|
<a ... > SITE MAP </a>
|
</span></td></tr></table></div></body></html>
事实上,下面是相同的 HTML Mechanize
:
...
<SPAN class="pageheaderlinks">
<A ... >MENU</A>
|
<A ... >SITE MAP</A>
|
<--! Notice how this continues -->
<A ... >HELP</A>
|
<A ... >EXIT</A>
</span>
...
问题是它似乎从浏览器报告BeautifulSoup
的末尾省略了一大段 HTML 。Mechanize
这可能是我如何处理事情的问题,但在这一点上,我非常迷茫。
有谁知道可能导致这种情况发生的原因?谢谢!:)