【问题标题】:python,not getting full responsepython,没有得到完整的响应
【发布时间】:2012-04-23 13:35:57
【问题描述】:

当我想使用 urllib2 获取页面时,我没有得到完整的页面。

这是python中的代码:

import urllib2
import urllib
import socket
from bs4 import BeautifulSoup
# define the frequency for http requests
socket.setdefaulttimeout(5)

    # getting the page
def get_page(url):
    """ loads a webpage into a string """
    src = ''

    req = urllib2.Request(url)

    try:
        response = urllib2.urlopen(req)
        src = response.read()
        response.close()
    except IOError:
        print 'can\'t open',url 
        return src

    return src

def write_to_file(soup):
    ''' i know that I should use try and catch'''
    # writing to file, you can check if you got the full page
    file = open('output','w')
    file.write(str(soup))
    file.close()



if __name__ == "__main__":
            # this is the page that I'm trying to get
    url = 'http://www.imdb.com/title/tt0118799/'
    src = get_page(url)

    soup = BeautifulSoup(src)

    write_to_file(soup)    # open the file and see what you get
    print "end"

我整个星期都在努力寻找问题! 为什么我没有看到完整的页面?

感谢帮助

【问题讨论】:

  • 我强烈建议使用出色的 python-requests 库而不是 urllib/urllib2。
  • 没有完整页面是什么意思?你得到了什么?
  • 如果您将src 写入文件,然后再将其输入BeautifulSoup,您会“获取完整页面”吗?如果是这样,BeautifulSoup 可能会省略部分 HTML 源代码以便能够正确解析它。
  • @simon 你说得对,尽管使用了 bs4,但如何获取整个页面?
  • 你为什么首先使用 BeautifulSoup?现在,您的代码只是将源代码插入并立即将其再次序列化。这没有多大意义......

标签: python url urllib2


【解决方案1】:

我有同样的问题,我虽然是 urllib 但它是 bs4。

代替使用

BeautifulSoup(src)

soup = bs4.BeautifulSoup(html, 'html.parser')

尝试使用

soup = bs4.BeautifulSoup(html, 'html5lib')

【讨论】:

    【解决方案2】:

    您可能需要多次调用 read,只要它不返回指示 EOF 的空字符串:

    def get_page(url):
        """ loads a webpage into a string """
        src = ''
    
        req = urllib2.Request(url)
    
        try:
            response = urllib2.urlopen(req)
            chunk = True
            while chunk:
                chunk = response.read(1024)
                src += chunk
            response.close()
        except IOError:
            print 'can\'t open',url 
            return src
    
        return src
    

    【讨论】:

    • @aminonsh 如果您指定明确的块大小,它会改变什么吗? (我修改了我的答案)
    • @aminonsh 并且您 100% 确定 src 在任何漂亮的汤解析之前是不完整的?您是否尝试过在同一个 URL 上执行 wget 并将下载的文件与 src 的内容进行比较?您不应与浏览器中显示的源进行比较,因为该站点可能会进行浏览器检测或使用 javascript 修改代码
    • 1.我正在使用浏览器进行比较。让我说清楚:1.如果我从浏览器中查看源代码,我可以得到 (

      Known For

      ) 标签 2. 但是在使用来自 python 的 gedit(接收到的数据)打开它之后,我没有获取 (

      Known For

      ) 标签 3. 这意味着我没有整页!!!
    • 所以如果您执行write_to_file(get_page(url)) 并比较结果文件,它是您在控制台上与wget URL 获得的文件的前N 个字节? N 有多大?
    • 好吧,我的错。 bs4 制造麻烦。我得到了整个响应,但是当使用 soup = BeautifulSoup(src) 时,我得到了一半的页面!为什么?
    猜你喜欢
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多