2014-12-30 2 views
1

정규식에 새로운 점이 있지만 스스로 만든 것은 작동하지 않습니다. 그것은 웹 사이트 html에서 데이터를 제공하기로되어 있습니다.정규 표현식 - HTML

나는 기본적으로 이것을 html로부터 얻고 싶다. 페이지 URL이 문자열 btw입니다.

<a href="http://store.steampowered.com/search/?category2=2" class="name">Co-Op</a> 

는 그리고 내가 내 정규 표현식에 대해 수행 한 것은 : 당신은 HTML/XML 또는 정규식을 사용하여 계단식 허용 다른 언어를 해석해서는 안

<a\bhref="http://store.steampowered.com/search/?category2=2"\bclass="name"*>(.*?)</a>\g 
+3

정규식을 사용하여 HTML을 구문 분석하는 것은 일반적으로 좋지 않습니다. HTML 파싱 라이브러리 또는 도구를 사용하면 훨씬 편리 할 것입니다. – Jason

답변

3

. 쿼리와

echo '<a href="http://store.steampowered.com/search/?category2=2" class="name">Co-Op</a>' | tidy -asxhtml -numeric 2> /dev/null | xmllint --html --xpath 'normalize-space(//a[@class="name" and @href="http://store.steampowered.com/search/?category2=2"])' - 2>/dev/null 

:

normalize-space(//a[@class="name" and @href="http://store.steampowered.com/search/?category2=2"]) 

// 어떤 태그를 의미한다 (

그러나 HTML을 가진 좋은 점은, 그것은 XML로 변환 할 수 있으며, XML 파싱을위한 좋은 툴킷을 가지고 있다는 것입니다 깊이과 관계없이) aa 태그를 의미하며, class=namehref=(the link)이라는 제약 조건을 지정합니다. 그런 다음 해당 태그 <a></a> 사이에 normalize-space 콘텐츠를 반환했습니다. 당신의 정규식에

import urllib2 
from bs4 import BeautifulSoup 

page = urllib2.urlopen("http://store.steampowered.com/app/24860/").read() 
soup = BeautifulSoup(page) 
print soup.find_all('a',attrs={'class':'name','href':'http://store.steampowered.com/search/?category2=2'}) 

댓글 :

파이썬에서 당신은 사용할 수 있습니다

문제는 정규식-지시가 아닌 문자로 해석됩니다 ? 같은 토큰이 포함되어 있다는 것입니다. 당신은 그들을 탈출해야합니다. 그것은 아마 읽어야

<a\s+href="http://store\.steampowered\.com/search/\?category2=2"\s+class="name"\S*>(.*?)</a>\g 

가 나는 또한 \s\b 교체, \s은 공백, 탭, 줄 바꿈 등의 공백 문자를 의미한다. 정규 표현식이 꽤 깨지기 쉽지만, hrefclass을 교환하기로 결정한 경우 프로그램에 문제가 있습니다. 이러한 문제의 대부분은 실제로 솔루션이지만 XML 분석 도구를 사용하는 것이 좋습니다.

+0

어떤 언어입니까? 나는 지금 파이썬으로 코딩하고있다 ... – JonasRH

+0

정규 표현식의 첫 번째 문제는 'a \ bhref'는 전혀 일치하지 않으며 확실히 'a href'가 아닌 것으로 보인다. 추가 문자없이 존재할 수없는 문자 인 '아'사이에 단어 경계를 묻습니다. 사실, 두 번째 문제입니다. 나는 첫 번째 문제에 동의한다 : 파싱을위한 정규 표현은 나쁜 생각이다. –

+0

@JonasRH : 간단한 리눅스 'bash'가 있지만 파이썬을위한 XML 분석기도 있습니다. –