我正在尝试使用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>
答案 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一起解析。