【问题标题】:Urllib2 returns html with empty bodyUrllib2 返回带有空正文的 html
【发布时间】:2015-04-12 16:34:32
【问题描述】:

我很好奇为什么 urllib2 模块返回带有空正文的 html。我确定我在那里放了一个正确的网址。即使我尝试使用 chrome 查看源代码,该页面也不会显示整个 html 代码。这是其中一页:http://www.firmy.cz/Velkoobchod-a-vyroba/Vyrobci-papiroveho-a-polygrafickeho-zbozi/Nakladatele-a-vydavatele?geo=0

如何解决这个问题?

这是我的一段代码,但我认为问题出在其他地方,根据 chrome 显示相同的代码。

def getSoup(url):
    req = urllib2.Request(url)
    response = urllib2.urlopen(req)
    page = response.read()
    soup = BeautifulSoup(page, 'lxml')
    return soup

此代码返回:

...
..
.. some head etc...
<meta content="!" name="fragment"/>
</head>
<body class="root" id="root"></body>
</html>

如您所见,主体是空的。

【问题讨论】:

  • 任何代码?你在做什么?
  • 我现在已经在我的问题中加入了一个代码,但我认为问题出在其他地方。正如我所写,即使是 Chrome 也不会显示完整的源代码。
  • 有趣,我似乎得到了一些code。网站本身的body标签对我来说也没有任何东西,可能是一些JS在做魔术。

标签: python html google-chrome request urllib2


【解决方案1】:

仅返回 response.read() 并将其解析为删除器换行符

url = "http://www.firmy.cz/Velkoobchod-a-vyroba/Vyrobci-papiroveho-a-polygrafickeho-zbozi/Nakladatele-a-vydavatele?geo=0"

def getSoup(url):
    req = urllib2.Request(url)
    response = urllib2.urlopen(req)
    page = response.read()
    response.close()
    return page

def do_whatever_you_want_with_response():
    page = getSoup(url)
    print page
    return page

【讨论】:

  • 感谢您的回答,但出现错误:page = soup.replace('\n', '') TypeError: 'NoneType' object is not callable It doesn't work.
  • 我的错误,我有不同的代码,但它仍然是一样的。我想你不明白我的意思。问题是它返回没有正文的html,resp。身体是空的,这是不可能的。我正试图得到那具尸体。
  • 我不确定 urllib2.urlopen(req) 是否返回任何正文方法。顺便说一句,为什么您要查看身体功能。 response.read() 方法正在返回完整的 html 页面。只需解析它并从中提取 html 正文部分。
  • 这就是问题所在。如果它返回完整的 html,例如,您可以在页面上看到一个字符串“www.krasnapani.cz”。但是没有这样的字符串。
  • 更新了我的答案。我们需要在打印值之前关闭 url 套接字。刚刚添加了 resonse.close() 方法。
猜你喜欢
  • 2012-05-25
  • 2022-09-25
  • 2020-05-23
  • 1970-01-01
  • 2017-11-25
  • 2014-08-23
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多