HTTP响应由BeautifulSoup的read()自动修改

时间:2018-04-02 17:19:28

标签: python python-3.x web-scraping beautifulsoup urllib

我尝试运行以下代码,但发现在bsObj1提取内容后,read()的文字被修改为空白文本。 bsObj3也被修改为空白文本,而我没有做任何事情。

为什么bsObj1bsObj3会变成空白?如何防止bsObj1自动更改?

from urllib.request import urlopen
from bs4 import BeautifulSoup

def getLinks(pageUrl):
    html1 = urlopen(pageUrl)
    html2 = urlopen(pageUrl)
    html3 = html1

    body1 = html1.read()

    bsObj1 = BeautifulSoup(html1)
    bsObj2 = BeautifulSoup(html2)
    bsObj3 = BeautifulSoup(html3)

    print("bsObj1's length is "+str(len(bsObj1.text)))
    print("bsObj2's length is "+str(len(bsObj2.text)))
    print("bsObj3's length is "+str(len(bsObj3.text)))

if __name__ == '__main__':
    getLinks("https://en.wikipedia.org/wiki/Main_Page")

输出: -

bsObj1's length is 0
bsObj2's length is 16000
bsObj3's length is 0

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

我相信你的代码中有拼写错误。你已经阅读了html1,所以当你把它解析为BeautifulSoup时,它将不会读取任何内容,因为body1 = html1.read()。已阅读html1已经与html3相同,因为它等于html1

以下代码工作正常。

body1 = html1.read()

bsObj1 = BeautifulSoup(body1)
bsObj2 = BeautifulSoup(html2)
bsObj3 = BeautifulSoup(body1)

示例输出

bsObj1的长度是16028

bsObj2的长度是16028

bsObj3的长度是16028

希望这有帮助。