선거 웹 사이트에서 일부 데이터를 긁어 내려고하는데 BeautifulSoup을 사용하여이 데이터를 가져 오는 방법을 알 수 없습니다.
내가 시도한 코드
import pandas as pd
from bs4 import BeautifulSoup
tx_url = 'https://results.texas-election.com/contestdetails?officeID=1001&officeName=PRESIDENT%2FVICE-PRESIDENT&officeType=FEDERAL%20OFFICES&from=race'
import urllib.request
local_filename, headers = urllib.request.urlretrieve(tx_url)
urllib.error.HTTPError : HTTP 오류 403 : 금지됨
soup = BeautifulSoup(tx_url)
/home/server/pi/homes/woodilla/.conda/envs/baseDS_env/lib/python3.7/site-packages/bs4/ init .py : 357 : UserWarning : "https://results.texas-election.com / contestdetails? officeID = 1001 & officeName = PRESIDENT % 2FVICE-PRESIDENT & officeType = FEDERAL % 20OFFICES & from = race "는 URL처럼 보입니다. 뷰티플 수프는 HTTP 클라이언트가 아닙니다. URL 뒤에서 문서를 가져오고 해당 문서를 Beautiful Soup에 공급하려면 요청과 같은 HTTP 클라이언트를 사용해야합니다. 그 문서를 뷰티플 스프에. Decoded_markup 비율
표는 다음과 같습니다.
우선, 표시되는 오류는 BeautifulSoup
잘못 사용하고 있음을 의미합니다 .
다음 BeautifulSoup
과 같이 HTTP 클라이언트에서 응답을 전달해야합니다 .
import requests
from bs4 import BeautifulSoup
url = "https://results.texas-election.com/races"
headers = {
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
둘째, 당신은 하지 않습니다 필요가 BeautifulSoup
해당 페이지를 긁어. 모든 것이 JSON
. 예를 들면 :
import requests
url = "https://results.texas-election.com/static/data/election/44146/246/Federal.json"
headers = {
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
response = requests.get(url, headers=headers).json()
for race in response["Races"]:
print(f"Results for {race['N']}")
for candidate in race["Candidates"]:
print(f"{candidate['N']} - {candidate['P']}: Votes {candidate['V']} - {candidate['PE']}%")
print(f"Total votes: {race['T']}")
print("-" * 80)
산출:
RESIDENT/VICE-PRESIDENT
ROQUE "ROCKY" DE LA FUENTE GUERRA - REP: Votes 7563 - 0.37%
BOB ELY - REP: Votes 3582 - 0.18%
ZOLTAN G. ISTVAN - REP: Votes 1447 - 0.07%
MATTHEW JOHN MATERN - REP: Votes 3512 - 0.17%
DONALD J. TRUMP (I) - REP: Votes 1898664 - 94.13%
JOE WALSH - REP: Votes 14772 - 0.73%
BILL WELD - REP: Votes 15824 - 0.78%
UNCOMMITTED - REP: Votes 71803 - 3.56%
Total votes: 2017167
--------------------------------------------------------------------------------
U. S. SENATOR
VIRGIL BIERSCHWALE - REP: Votes 20494 - 1.06%
JOHN ANTHONY CASTRO - REP: Votes 86916 - 4.49%
JOHN CORNYN (I) - REP: Votes 1470669 - 76.04%
DWAYNE STOVALL - REP: Votes 231104 - 11.95%
MARK YANCEY - REP: Votes 124864 - 6.46%
Total votes: 1934047
--------------------------------------------------------------------------------
U. S. REPRESENTATIVE DISTRICT 1
JOHNATHAN KYLE DAVIDSON - REP: Votes 9659 - 10.33%
LOUIE GOHMERT (I) - REP: Votes 83887 - 89.67%
Total votes: 93546
--------------------------------------------------------------------------------
and so on ...
편집하다:
언급 한 특정 URL에 대한 데이터를 얻으려면 다음을 사용하십시오.
참고 : 이것은 JSON
거대 하므로 데이터의 일부일뿐입니다 . JSON
원하는 방식으로 구문 분석 할 수 있도록 전체를 덤프하는 코드를 추가 했습니다.
import json
import requests
url = "https://results.texas-election.com/static/data/election/44144/108/County.json"
headers = {
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
response = requests.get(url, headers=headers).json()
with open("county_results.json", "w") as output:
json.dump(response, output, indent=4, sort_keys=True)
for v in response.values():
for id_, race_data in v["Races"].items():
print(race_data["C"])
샘플 출력 :
{'4250': {'id': 4250, 'N': 'KEN WISE (I)', 'P': 'REP', 'V': 0, 'PE': 0.0, 'C': '#E30202', 'O': 1, 'EV': 0}, '6015': {'id': 6015, 'N': 'TAMIKA "TAMI" CRAFT', 'P': 'DEM', 'V': 0, 'PE': 0.0, 'C': '#007BBD', 'O': 2, 'EV': 0}}
{'2966': {'id': 2966, 'N': 'BRENDA MULLINIX (I)', 'P': 'REP', 'V': 0, 'PE': 0.0, 'C': '#E30202', 'O': 1, 'EV': 0}, '6224': {'id': 6224, 'N': 'JANET BUENING HEPPARD', 'P': 'DEM', 'V': 0, 'PE': 0.0, 'C': '#007BBD', 'O': 2, 'EV': 0}}
{'2967': {'id': 2967, 'N': 'MAGGIE JARAMILLO (I)', 'P': 'REP', 'V': 0, 'PE': 0.0, 'C': '#E30202', 'O': 1, 'EV': 0}, '3708': {'id': 3708, 'N': 'TAMEIKA CARTER', 'P': 'DEM', 'V': 0, 'PE': 0.0, 'C': '#007BBD', 'O': 2, 'EV': 0}}
and much, much more...
어떻게 찾았 JSON
습니까?
브라우저 개발자 도구의 네트워크 탭을 살펴 보았습니다. :)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다