Tha*_*zer 2 python beautifulsoup html-parsing
我对Python很陌生,但是到底是什么......这是一个奇怪的问题所以我会尽我所能尽力解释它:
我正忙着用Python编写一个脚本来检查一个网页是否有特定的变化(基本上从0翻到1的数字).当发生更改时,脚本将继续执行其他操作.不幸的是,我还没有达到这一点,因为我甚至在解析HTML时遇到了麻烦,因为BeautifulSoup抓住它时很多HTML都丢失了!(至少,这是我声称的.)
让我们一步一步:我正在使用BeautifulSoup并Mechanize为此而努力.首先,我在网页上找到一个表单并选择它,根据需要更改表单中的控件.(我已经验证了所有控件都按照我的预期更改.)之后,我提交表单,然后调用我编写的辅助函数调用process_results():
...
form = list(client.forms())[1]
client.select_form('ttform');
...
# Modify controls
...
client.submit()
process_results(client)
Run Code Online (Sandbox Code Playgroud)
process_results()只是检查客户回来了什么.首先,根据放入表单的内容,您可以获得无效的搜索结果,因此我想搜索网页上显示的错误消息,看看它是否存在.我BeautifulSoup用来做这个:
# Processes search results.
def process_serach_results(cli):
html = cli.response().read()
soup = BeautifulSoup(html)
...
Run Code Online (Sandbox Code Playgroud)
评估有问题的代码是否出现在页面上的语句如下所示:
...
if (soup.find('td', attr = {'class' : 'msgarea'}) != None):
# Do something...
...
Run Code Online (Sandbox Code Playgroud)
这永远不会被评估为真,因为它找不到我正在描述的标签.我决定直接从打印出既响应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>
...
Run Code Online (Sandbox Code Playgroud)
这是显示的最后一段HTML BeautifulSoup:
...
<span class="pageheaderlinks">
<a ... > MENU </a>
|
<a ... > SITE MAP </a>
|
</span></td></tr></table></div></body></html>
Run Code Online (Sandbox Code Playgroud)
事实上,这是来自Mechanize以下相同的HTML :
...
<SPAN class="pageheaderlinks">
<A ... >MENU</A>
|
<A ... >SITE MAP</A>
|
<--! Notice how this continues -->
<A ... >HELP</A>
|
<A ... >EXIT</A>
</span>
...
Run Code Online (Sandbox Code Playgroud)
问题是,BeautifulSoup从Mechanize浏览器报告的结尾看,它似乎省略了大量的HTML .这可能是我如何处理事情的问题,但在这一点上,我非常迷失.
有谁知道可能导致这种情况发生的原因?谢谢!:)
BeautifulSoup支持一堆不同的HTML解析器.Python的内置解析器不是很快或很宽松(意味着它很难理解无效的HTML),所以它会对你的HTML产生影响.
尝试安装lxml,这更宽松,更快.如果这不起作用,html5lib最好的选择,因为它是最宽松的,但也是最慢的.
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |