2016-09-19 2 views
-2

나는 어디로 가야할지 약간 분실되어 도움이 될 것이라고 생각했습니다.beautifulsoup를 사용하여 CGI 정보 얻기

url=http://www.pro-football-reference.com/play-index/play_finder.cgi?request=1&super_bowl=0&match=all&year_min=2015 &year_max=2015 &game_type=R&game_num_min=0&game_num_max=99&week_num_min=0&week_num_max=99&quarter=1&tr_gtlt=lt&minutes=15&seconds=00&down=1&yg_gtlt=eq&yards=-5&is_first_down=-1&field_pos_min_field=team&field_pos_max_field=team&end_field_pos_min_field=team&end_field_pos_max_field=team&type=RUSH&is_complete=-1&is_turnover=-1&turnover_type=interception&turnover_type=fumble&is_scoring=-1&score_type=touchdown&score_type=field_goal&score_type=safety&is_sack=-1&include_kneels=-1&no_play=0&order_by=yards&more_options=1&rush_direction=LT&pass_location=DL& 
BeautifulSoup(url) 

내가 : 나는 그래서 같은 관심의 요청 URL과 일치하는 문자열에 BeautifulSoup로를 실행하고,

http://www.pro-football-reference.com/play-index/play_finder.cgi

이 이렇게하려면 다음 검색 양식에서 데이터를 자동으로 긁어 위해 노력하고 있어요 내가 문자열을 브라우저에 여러 번 연결하고 필요한 테이블 (여기서는 id = "all_plays"인 개별 재생 테이블)을 보았으므로 문자열이 정확하다는 것을 확신하지만 URL에서 BeautifulSoup을 실행하면 마크가 누락됩니다 :

< .html 중에서> < .body> < .P>http://www.pro-football-reference.com/play-index/play_finder.cgi?request=1&super_bowl=0&match=all&year_min=2015&year_max=2015&game_type=R&game_num_min=0&game_num_max=99&week_num_min=0&week_num_max=99&quarter=1&tr_gtlt=lt&minutes=15&seconds=00&down=1&yg_gtlt=eq&yards=-5&is_first_down=-1&field_pos_min_field=team&field_pos_max_field=team&end_field_pos_min_field=team&end_field_pos_max_field=team&type=RUSH&is_complete=-1&is_turnover=-1&turnover_type=interception&turnover_type=fumble&is_scoring=-1&score_type=touchdown&score_type=field_goal&score_type=safety&is_sack=-1&include_kneels=-1&no_play=0&order_by=yards&more_options=1&rush_direction=LT&pass_location=DL < ./p> < ./body> < ./html>

(이 포맷을 시도하지 않을 수 있도록 나는 각 HTML 태그의 기간을 추가 BeautifulSoup가 부착하는 태그).

나는 이것이 원격 cgi에 대한 요청 인 것과 관련이 있다고 가정하고 있지만 이에 대한 대답은 없다.

beautifulsoup를 사용하여 테이블을 잡을 수있는 방법이 있습니까? 그렇지 않으면 셀레늄 드라이버를 켜고 그런 식으로 자동화 할 수도 있지만 마지막 옵션입니다.

감사합니다.

답변

1

먼저 BeautifulSoup에 URL을 구문 분석하여 문자열로 요청하고 있습니다. BeautifulSoup은 HTTP 요청 라이브러리가 아닌 HTML 파서이므로이 경우 URL에 요청합니다.

대신, 예를 들어, requests 패키지는 요청을하고 BeautifulSoup와 응답 구문 분석 :

['1', '100.0%'] 
: 이것은 최초의 "다운"테이블의 데이터 행을 인쇄

import requests 
from bs4 import BeautifulSoup 

url = 'http://www.pro-football-reference.com/play-index/play_finder.cgi' 

with requests.Session() as session: 
    session.headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.113 Safari/537.36"} 
    session.get(url) 

    response = session.get(url + "?request=1&super_bowl=0&match=all&year_min=2015 &year_max=2015 &game_type=R&game_num_min=0&game_num_max=99&week_num_min=0&week_num_max=99&quarter=1&tr_gtlt=lt&minutes=15&seconds=00&down=1&yg_gtlt=eq&yards=-5&is_first_down=-1&field_pos_min_field=team&field_pos_max_field=team&end_field_pos_min_field=team&end_field_pos_max_field=team&type=RUSH&is_complete=-1&is_turnover=-1&turnover_type=interception&turnover_type=fumble&is_scoring=-1&score_type=touchdown&score_type=field_goal&score_type=safety&is_sack=-1&include_kneels=-1&no_play=0&order_by=yards&more_options=1&rush_direction=LT&pass_location=DL&") 

    soup = BeautifulSoup(response.content, "html.parser") 
    for row in soup.select("#div_down table tr")[1:]: 
     print([cell.get_text() for cell in row.find_all("td")])