如何使用bs4

时间:2019-04-23 20:42:09

标签: python beautifulsoup

我正在尝试使用bs4抓取一个包含表格的网站,但是与我从检查中获得的内容相比,我所获得的内容元素并不完整。我在其中找不到标签<tr><td>。如何获得该网站的全部内容,尤其是表格的标签?

这是我的代码:

from bs4 import BeautifulSoup
import requests

link = requests.get("https://pemilu2019.kpu.go.id/#/ppwp/hitung-suara/", verify = False)
src = link.content
soup = BeautifulSoup(src, "html.parser")
print(soup)

我希望内容中包含标签<tr><td>,因为当我检查它们时它们确实存在,但是我在输出中找不到它们。

Here's the image of the page where there is the tag <tr> and <td>

1 个答案:

答案 0 :(得分:0)

您应该将要解析的文本内容转储到文件中并查看。这样可以肯定地告诉您什么是和不存在的。像这样:

from bs4 import BeautifulSoup
import requests

link = requests.get("https://pemilu2019.kpu.go.id/#/ppwp/hitung-suara/", verify = False)
src = link.content
with open("/tmp/content.html", "w") as f:
    f.write(src)
soup = BeautifulSoup(src, "html.parser")
print(soup)

运行此代码,然后查看文件“ /tmp/content.html”(显然,如果使用的是Windows,则使用其他路径),然后查看文件中实际包含的内容。您可能可以使用浏览器来执行此操作,但这是最确保您知道所获得内容的方式。当然,您也可以添加print(src),但如果是我,我会将其转储到文件中

如果要查找的HTML不在返回的初始HTML中,则该HTML来自其他地方。该表可以由JavaScript动态构建,也可以来自另一个URL引用,该URL引用可以调用HTTP API以通过传递给API端点的参数来获取表的HTML。

您将不得不对网站的设计进行逆向工程,以找到HTML的来源。如果它来自JavaScript,那么您可能就没有编写脚本来执行浏览器的脚本,因此您可以通过编程方式获得对浏览器内存中DOM的访问。

我建议运行调试代理,该代理将向您显示浏览器发出的每个HTTP请求。您将能够看到每个请求和响应的内容。如果可以这样做,则可以找到实际返回所需内容的URL(如果存在)。您必须处理SSL证书,因为这是一个https端点。调试代理通常很容易。我们使用Charles。标准的浏览器工具箱也可能会这样做...允许您查看由特定页面加载生成的每个请求和响应。

如果您可以找到实际返回表格HTML的URL,则可以使用该URL来获取它并与BS一起解析。