提问人:Jed 提问时间:9/13/2023 更新时间:9/13/2023 访问量:23
从维基百科页面的边表收集数据
Collect data from side table(s) in wikipedia page(s)
问:
我正在尝试创建一个 python 脚本,该脚本可以从维基百科页面的侧表中收集信息。有关示例,请参阅此页面。在页面的右侧,有 3 个垂直的 HTML。第一代名为“福特Fusion”,第二代为“第一代”,第三代为“第二代”。table
当我尝试收集网页的 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
我已经检查了变量,但由于某种原因,s 甚至不存在,尽管我在浏览器中检查网页时可以清楚地看到它们。如何让这些表作为对 URL 的调用的一部分返回?html_text
table
request.get
答:
0赞
Jed
9/13/2023
#1
问题在于维基百科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
评论