【问题标题】:Some website content causes BeautifulSoup (and lxml) to restart Python session某些网站内容会导致 BeautifulSoup(和 lxml)重新启动 Python 会话
【发布时间】:2012-05-19 13:36:51
【问题描述】:

我正在获取和解析中大量的网页。我注意到我的脚本以 Python 会话重新启动而自发结束。到目前为止,似乎只有当我尝试从 nasa.gov 页面制作汤时才会发生这种情况。即:

import urllib2
from bs4 import BeautifulSoup

page=urllib2.urlopen('http://www.nasa.gov')
soup=BeautifulSoup(page)

=====================================RESTART=======================================

有谁知道为什么会发生这种情况以及我是否可以避免这种情况?它不会抛出异常或任何东西,会话只是重新启动。这发生在两台不同的机器上,但如果其他人无法重现它我会很感兴趣(我使用的是 Python 2.7.2 - Enthought Distribution)

编辑/更新:

我刚刚尝试用lxml 代替BeautifulSoup,但它会导致同样的自发重启。即

from lxml import html
page=html.parse('http://www.nasa.gov')

============================== RESTART =================================

一旦 Python 打开并尝试解析页面,会话就会重新启动。有趣的是,读取页面并将其打印到控制台可以正常工作。

【问题讨论】:

  • 我认为您需要先在套接字上运行 .read(),提取字符串,然后在字符串上运行 BeautifulSoup。
  • 感谢您的建议。不幸的是,添加 .read() 并没有帮助。上面的代码完美适用于我使用过的数百个其他网站。这个站点由于某种原因导致会话重新启动。
  • 我只是想补充一点,我在 Windows 机器上看到了同样的东西,但在带有 Linux (Debian) 的 VPS 上,相同的代码和相同的输入可以正常工作,无需打嗝。现在大家都欢呼 Linux。

标签: python html screen-scraping beautifulsoup lxml


【解决方案1】:

该 url 的 Doctype 错误。试试这个:

page=urllib2.urlopen('http://www.nasa.gov/').read().replace("<!DOCTYPE \"xmlns:xsl='http://www.w3.org/1999/XSL/Transform'\">", "<!DOCTYPE html>")

soup=BeautifulSoup(page)

【讨论】:

  • 我的错。第二次编辑中的“html”是一个错字。我当然用过http。我真的很想让其他人试试这个,看看他们是否可以复制这个问题。
  • 我在 2.7.4(windows)上都试过了。 Lxml 很好,bs4 崩溃了。
  • 我看到了问题,这是一个损坏的文档类型。我正在更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多