请求& urllib失败得到完整的HTML

时间:2017-09-21 17:15:48

标签: python html web-scraping python-requests urllib

我试图得到评论&作者。作者被链接,以便我知道谁回复了谁。因此,将所有评论存储在那里非常重要,否则对缺失评论的回复无处可锁。 (我知道这有点令人困惑,但在这个网站上,回复也是评论,但也是特别的,也表明他们回复的评论的作者。)

来自中文网站(https://www.zhihu.com/node/AnswerCommentListV2?params=%7B%22answer_id%22%3A%2215184366%22%7D)使用请求。

{{1}}

然而,我发现上面的代码可以获得我想要的大部分内容,但有一些“漏洞”。大多数评论很好地列出,但有些评论遗失。在调试期间,我发现请求的响应不完整。由于未知原因,回复本身错过了一些评论。 Console Output(所有“无”应该是评论)

我也尝试过使用urllib的类似方法而且不行。

你可以帮助我像浏览器那样获得完整的HTML吗?

更新: 我认为这个问题与网站的回复有关。简单的requests.get无法像Chrome那样获得完整的网站。我想知道是否存在获得完整html的基本解决方案。 我试过@ eLRuLL的代码。它确实得到了丢失的作者姓名。然而,丢失的作者似乎都是“知乎用户”,这意味着该网站的一般用户。(我期待不同的特定用户名)与Chrome浏览器相比,浏览器可以很好地显示特定的用户名。

2 个答案:

答案 0 :(得分:0)

问题似乎是您认为所有评论都应该在a标记内,但如果您检查,那么您遗失的评论就是那些没有链接的评论。用户的名称(因此您无法使用a标记来查找),因此要获取您必须使用的作者姓名:

p = comment_author.find("div", "zm-comment-hd").text
print(p)    

答案 1 :(得分:0)

试试这个。您将拥有所有作者和评论。

import requests
from bs4 import BeautifulSoup

url = "https://www.zhihu.com/node/AnswerCommentListV2?params=%7B%22answer_id%22%3A%"+"2215184366"+"%22%7D"
res = requests.get(url, headers={'User-Agent':'Mozilla/5.0'})
soup = BeautifulSoup(res.text,"lxml")
for item in soup.select(".zm-item-comment"):
    try:
        author = item.select(".author-link")[0].text
        comment = item.select(".zm-comment-content")[0].text
        print(author,comment)
    except:pass