从维基百科页面的边表收集数据

问题描述 投票:0回答:1

我正在尝试创建一个 python 脚本,可以从维基百科页面的边表中收集信息。有关示例,请参阅此页面。沿着页面的右侧,有 3 个垂直的 HTML

table
。第一个名为“福特 Fusion”,第二个名为“第一代”,第三个名为“第二代”。

当我尝试收集网页的 HTML 时,右侧的表格不会返回这样的代码

import requests
from bs4 import BeautifulSoup

search_string = f"Ford Fusion"
search_url = f"https://en.wikipedia.org/w/api.php?action=query&list=search&format=json&srsearch={search_string}"
search_response = requests.get(search_url)
search_data = search_response.json()

closest_match = search_data["query"]["search"][0]["title"]
page_url = f"https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&titles={closest_match}"
page_response = requests.get(page_url)
page_data = page_response.json()

page_id = list(page_data["query"]["pages"].keys())[0]

html_text = page_data["query"]["pages"][page_id]["extract"]
soup = BeautifulSoup(html_text, "html.parser")

tables = soup.find_all('table')
print(len(tables))

>> 0

我已经检查了

html_text
变量,由于某种原因,
table
甚至不存在,尽管我在浏览器中检查网页时可以清楚地看到它们。如何让这些表作为
request.get
调用 URL 的一部分返回?

python web-scraping python-requests wikipedia
1个回答
0
投票

问题在于维基百科 API 端点对其返回的内容有限制。如果您将代码更改为如下所示,您将在 HTML 响应中获得表格:

import requests
from bs4 import BeautifulSoup

search_string = f"Ford Fusion"
search_url = f"https://en.wikipedia.org/w/api.php?action=query&list=search&format=json&srsearch={search_string}"
search_response = requests.get(search_url)
search_data = search_response.json()

closest_match = search_data["query"]["search"][0]["title"]    
page_url = f"https://en.wikipedia.org/wiki/{closest_match}"

page_response = requests.get(page_url)

html_text = page_response.content.decode()
soup = BeautifulSoup(html_text, "html.parser")

tables = soup.find_all('table')
print(len(tables))

>> 13
© www.soinside.com 2019 - 2024. All rights reserved.