2014-04-09 2 views
-1

일반적인 질문으로이 질문을하려고 시도했으나 시도하기가 너무 복잡했습니다. 그것을 일반적으로 묘사하십시오. 그래서 구체적으로 여기에 있습니다 :Python - 텍스트 줄 읽기, html 탐색 및 단일 for 루프 내 문서 작성하기

저는 프로그래머가 아닙니다. 나는 실험 심리학에서 석사 과정을 밟았으며 통계 수업을위한 부 프로젝트로 Steam에서 게임 구매를 예측하기위한 모델을 만들었습니다. 이 프로젝트의 데이터를 수집하기 위해 프로그래밍하는 법을 배우기 시작했습니다. 다음과 같이

내 프로그램은 지금까지입니다 :

#The first line opens up a list of random Steam IDs i already created, 
#the second assigns them to a variable 
list = open('d:\python\SteamUserIDs.txt').read().splitlines() 
SteamID = str(list) 

#For the purposes of figuring things out, I'm using just the first 10 entries in my list 
#The next four lines are the URL requests and assigning the output to a variable "response" 
for SteamID in list[0:10:1]: 
    request = urllib2.Request('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=MYSTEAMAPIKEY&steamid=%s' %SteamID, headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36"}) 
    response = urllib2.urlopen(request) 
    request2 = urllib2.Request('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0001/?key=MYSTEAMAPIKEY&steamids=%s' %SteamID, headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36"}) 
    response2 = urllib2.urlopen(request2) 

    f1 = open('D:/Python/Steam/UserData/%s PlayerInfo.txt'% (SteamID,), 'w') 
    for lines in response.readlines(): 
     f1.write(lines) 
    for lines in response2.readlines(): 
     f1.write(lines) 
    f1.close() 

는 지금까지이 프로그램이 큰 노력하고 있습니다. 그것은 필요한 일을하지만 더 많은 정보가 필요합니다. 불행히도 Steam API를 통해 내가 관심있어하는 추가 변수에 액세스하는 방법을 찾지 못했습니다. 그러나 관심있는 나머지 정보는 Steam의 html 소스 사용자 프로필에서 사용할 수 있습니다. 이것은 내가 문제가있는 곳입니다. 두 번째 요청의 줄에서 프로필 URL을 가져올 수 있습니다.

"PLAYERID는"사용자가 자신에게

또는

"profileurl": "http://steamcommunity.com/profiles/STEAMNUMBER/" 

를 생성하는 문자열 인
"profileurl": "http://steamcommunity.com/id/PLAYERID/" 

"STEAMNUMBER : 두 번째 URL 요청에

는 하나를 읽어 줄있다 "는 steam에 의해 생성 된 숫자입니다 (이것은 SteamID 변수에서 사용 된 것과 같습니다). 사용자가 자신의 프로필에 대한 사용자 지정 이름을 만들지 않았을 때 사용되는 것 같습니다.

문제 1 : 위의 플레이어 URL을 인쇄하는 데 어려움이 있습니다. 나는 "profileurl"을 사용하려고 시도했다 : target으로 그리고 나서 URL을 캡쳐하기 위해 line.split()을 사용했지만, 나는 항상 탭과 리턴을 나타내는 펑키 한 문자로 끝난다. 그리고 나는 어떻게 제거 할 지 모르겠다. 따옴표.

문제 2 : html 페이지가 표시되면 손으로 데이터를 찾을 수는 있지만 파이썬에서 찾도록 지시하는 방법을 모르겠습니다. 관심있는 정보 중 하나는 사람이 한 리뷰의 양입니다. 당신은 HTML의이 부분에서이 정보를 찾을 수 있습니다이 부분에 대한

<div class="profile_count_link"> 
       <a  href="http://steamcommunity.com/id/STEAMUSER/recommended/"> 
        <span  class="count_link_label">Reviews</span>&nbsp; 
         <span  class="profile_count_link_total"> 

                   3 

를, 내가 관심이있는 모든 숫자입니다,하지만 난에 있는지를 캡처하는 방법으로 손해를보고 정말이야 내가 참조로 사용하고있는 텍스트와 다른 줄.

문제점 3 :이 코드를 현재 프로그램 내에서 for 루프 내에 유지하여 숫자가 같은 문서에 표시되도록 할 수 있습니까? 프로필 URL을 찾기 위해 코드 조각을 추가하려고 시도했지만 시도한 후에 이전 응답의 일부가 손실되기 시작했습니다.

오랫동안 방치 된 게시물에 대해 죄송합니다.

+0

나는 이해하지 못한다. 서버에서 html 또는 JSON을 수신합니까? – njzk2

+0

기본값으로 JSON이라고 들었지만 JSON이 무엇인지 모르겠습니다. – userPinealbody

답변

1

Steam API를 호출 할 때 url에 &format=json을 추가하십시오. 즉아래의 URL에서 :

http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=MYSTEAMAPIKEY&steamid=%s
http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0001/?key=MYSTEAMAPIKEY&steamids=%s

나는 그것이 반환하는 기본 형식은 json 생각하지만, 그냥 명시하고. 당신이 결과를 일단

, 파이썬의 json 모듈을 사용하고

data = json.load(response)

문제 1 JSON 객체로 데이터를로드 :
그런 다음 data["profileurl"]로 프로필 URL에 액세스 할 수 있습니다. 이를 달성하기 위해 문자열 분할 함수가 필요하지 않습니다.

참고 : Steam API에서 반환 한 json 응답의 구조에 따라 profleurl에 액세스하는 방법을 변경해야합니다. json 데이터의 형식을 지정하는 방법을 배우십시오. 그러면 json 데이터의 데이터에 액세스하는 방법에 대해 알게 될 것입니다.

문제 2 :
특정 HTML에서 컨텐츠를 얻으려면, 당신은 BeautifulSoup 라이브러리를 사용할 수 있습니다. 로 위의 HTML이 BeautifulSoup로를 사용하여 리뷰 수를 얻기 위해, 당신은 할 수 :

from bs4 import BeautifulSoup 
html = ''' 
<div class="profile_count_link"> 
<a  href="http://steamcommunity.com/id/STEAMUSER/recommended/"> 
<span  class="count_link_label">Reviews</span>&nbsp; 
<span  class="profile_count_link_total"> 
3 
</span> 
</div> 
''' 
soup = BeautifulSoup(html) 
review_count = soup.find('span', attrs={'class':'profile_count_link_total'} 
print review_count.text # prints 3 

문제 3 : 당신이 요구하는
완전히 확실하지 무슨. 위에서 제시 한 것들로 시작하면 문제에 대해 명확하게 이해할 수 있습니다.

+0

방향에 대해 감사드립니다. 이것은 아주 기본적인 질문이지만, 이전에 내가 추천 한 것이 었습니다. 다운로드했지만, 설치하는 방법을 잘 모르겠습니다 ... 어떻게 사용할 수있게 만들었습니까? – userPinealbody