2017-12-29 6 views
0

저는 파이썬을 처음 사용합니다. 두 번째 시도에서 프로젝트의 하이퍼 참조에서 부분 문자열, 특히 식별 번호를 추출하고 싶습니다. url.Python을 사용하여 특정 하이퍼 참조에서 특정 부분 문자열 추출하기

예를 들어 this url은 내 검색어의 결과이며 하이퍼 참조 http://www.chessgames.com/perl/chessgame?gid=1012809이 표시됩니다. 여기에서 식별 번호 "1012809"를 추출하여 URL 에서 파일을 다운로드하려는 후 URL http://www.chessgames.com/perl/chessgame?gid=1012809으로 이동하려고 추가합니다. 그러나 나는 식별자를 추출 할 수있는 방법을 찾을 수 없기 때문에 현재이 문제에 대한 몇 가지 조치를 취하고있다. 알빈 바울은 주석으로

from bs4 import BeautifulSoup 
url = 'http://www.chessgames.com/perl/chess.pl?yearcomp=exactly&year=1932&playercomp=white&pid=&player=Alekhine&pid2=&player2=Naegeli&movescomp=exactly&moves=&opening=&eco=&result=1%2F2-1%2F2' 
page = urllib2.urlopen(url) 
soup = BeautifulSoup(page, 'html.parser') 
import re 
y = str(soup) 
x = re.findall("gid=[0-9]+",y) 
print x 
z = re.sub("gid=", "", x(1)) #At this point, things have completely broken down... 
+0

여기 BTW BeautifulSoup로의 사용은 무엇입니까? – johnII

+2

're.findall()'은리스트 x를 반환합니다. 여러분은'x (1)'함수처럼리스트를 호출하려고합니다. 잘못된 것입니다.'x [0]'를 써서 첫 번째 값을 얻을 수 있습니다. –

+0

모두 감사합니다. 나는 당신의 대답을 upvoted, 비록 내가 아직 15 명 이상의 평판을 구축하지 않았기 때문에 그들이 표시되지 않습니다. –

답변

0

, 목록을 반환 re.findall, 당신이 그것을에서 요소를 추출해야합니다

여기 내 MWE입니다. 그런데 BeautifulSoup은 필요하지 않습니다. urllib2.urlopen(url).read()을 사용하면 내용의 문자열을 얻을 수 있으며 re.sub도 필요하지 않습니다. 하나의 정규식 패턴 (?:gid=)([0-9]+)이면 충분합니다.

import re 
import urllib2 
url = 'http://www.chessgames.com/perl/chess.pl?yearcomp=exactly&year=1932&playercomp=white&pid=&player=Alekhine&pid2=&player2=Naegeli&movescomp=exactly&moves=&opening=&eco=&result=1%2F2-1%2F2' 

page = urllib2.urlopen(url).read() 

result = re.findall(r"(?:gid=)([0-9]+)",page) 

print(result[0]) 
#'1012809' 
0

여기에는 정규식이 필요하지 않습니다. Css 선택기와 함께 문자열 조작은 올바른 방향으로 이끌 것입니다. 아래의 스크립트를 시도 :

import requests 
from bs4 import BeautifulSoup 

page_link = 'http://www.chessgames.com/perl/chess.pl?yearcomp=exactly&year=1932&playercomp=white&pid=&player=Alekhine&pid2=&player2=Naegeli&movescomp=exactly&moves=&opening=&eco=&result=1%2F2-1%2F2' 
soup = BeautifulSoup(requests.get(page_link).text, 'lxml') 
item_num = soup.select_one("[href*='gid=']")['href'].split("gid=")[1] 
print(item_num) 

출력 :

1012809 
관련 문제