5

Objective-C에 접근 할 수있는 라이브러리가 있거나, this one과 같은 형식의 페이지를 긁어 낼 수 있는지 궁금합니다. 구체적으로, 모든 날짜와 모든 텍스트를 모든 날짜 옆에 표시합니다. 그렇지 않다면이 일을하는 가장 좋은 방법은 무엇입니까? 정규식? NSString에 이미 내장 된 방법이있을 수 있다고 들었습니다. 사실입니까?위키 피 디아를 긁어서 파싱하기 페이지

XML 파일이나 API와 같은 스크래핑에 대한 대안이 있는지 살펴 보려고했습니다. 나는 API를 찾았지 만, 내가 볼 수있는 유일한 클라이언트는 다른 언어에 있으며 페이지를 검색하지 않고 콘텐츠를 게시 할 수있는 것 같습니다.

편집 : 그래서 이러한 링크에서 API에 대한 자세한 내용을 발견 :

그리고 약간의 HTML을 반환 this request을 마련 할 수 있었다 인코딩 된 텍스트 (음, 형식은 XML이지만, »a href= 등의 페이지 텍스트가 포함됩니다. 필자가 문서 작성을 통해 mak을 볼 수 있는지 알아볼 것입니다. e 이것은 조금 더 나아졌지만 그렇지 않다면 이것을 파싱하는 것에 대한 권고 사항이 있습니까?

편집 2 : 좋아 감사 this doc page에, 그래서 내가 데이터를 검색 할 수있었습니다 간단하고 깨끗한 방법은 관련 섹션의 (위키 마크 업에서 ) 원시 데이터를 반환이 constructed link을 사용하고 있습니다. 그러나, 나는 그때 그것을 파싱 할 필요가 있다고 생각하는데, 실제로 그렇다면 전체 기사보다 훨씬 쉬워야한다.

누구나 Objective-C에서 다음과 같은 위키 마크 업을 구문 분석 할 때 권장 사항이 있습니까? 내가 갖는 결국 원하는 것은

==Events== 
* [[710]] – [[Saracen]] invasion of [[Sardinia]]. 
*[[1275]] – Traditional founding of the city of [[Amsterdam]]. 
*[[1682]] – [[Philadelphia]], [[Pennsylvania]] is founded. 

, 나는 정보의 첨부 조각과 날짜를 저장하는 것 NSDictionary 또는 유사한 수집을 것 같아요. 감사!

답변

1

혼합 HTML 데이터 스트림에서 대상 데이터 추출을 위해 정규식을 제안 할 것입니다.

휴대 전화에 이미 RegEx 라이브러리가 있습니다.이 라이브러리는 숨겨져 있지만 일종의 간단한 호출 인 RegexKitLite을 사용하여 노출시킬 수 있습니다 (아래로 스크롤하여 가벼운 버전을 만들어야합니다). 그것은 당신이 정규식을 할 수있게 해주는 NSString에 대한 몇가지 확장을 가진 클래스가되고, 그 다음 두 개의 캡처 된 match를 가진 정규식을 정의 할 것입니다. 하나는 숫자를위한 것이고 하나는 내용을위한 것입니다. 둘러싸는 태그와 중간 태그. 표준 RegEx의 "라이트"버전이지만 필요한 모든 기능을 지원합니다.

API 접근법은 유망하지만 생 마크 업을 얻은 후에는 데이터를 파싱하는 데 유사한 정규식 접근 방식을 사용해야 할 것입니다. 정규 표현식의 복잡성과 데이터 전송 시간을 줄이면 여전히 의미가있을 것입니다. 두 접근법을 결합 할 수있는 이유는 없습니다.

+0

감사합니다. 고맙습니다. 나는 내가가는 길을 생각한다. (내가 이것을 할 수있는 유일한 방법은) 원시 데이터의 비트를 얻고 그것을 어떻게 든 파싱하는 것이다. 위의 데이터 예제를 포함 시켰습니다.하지만 그 질문에 대해 새로운 질문을 만들 가능성이 큽니다. –

+0

새 데이터를 분석하는 것이 훨씬 쉽습니다. 이벤트 다음에 시작하는 문자열 범위를 찾은 다음 줄 끝까지 ndash 뒤에 오는 모든 항목과 함께 대괄호로 묶인 순수한 숫자와 일치하는 문자열을 찾아서 처리합니다. 그러면 모든 "["및 "]"문자를 제거해야하고 모든 설정이 완료됩니다. HTML보다 처리가 쉽지만 무거운 슈퍼 링크입니다. –

+0

고마워, 파싱에 관한 후속 질문에 답해 주시겠습니까? http://stackoverflow.com/questions/1634012/how-to-parse-some-wiki-markup 감사합니다. –

0

가장 확실한 방법은 모든 언어로 제공됩니다.

온라인으로 어떤 사이트가 좋은 방법으로 데이터를 노출하면 위키피디아가됩니다.

기사를 XML, RDF 또는 JSON으로 볼 수 있습니다.

+0

좋은 형식으로 데이터를 검색 할 수있는 방법이 있다면 꼭 묻는 것입니다.하지만 내가 본 것처럼 보이지는 않습니다. –

3

위키피디아의 페이지가 일반 텍스트로 저장되고 사용자가 일반 텍스트로 입력하면 주어진 구조화 된 데이터 세트를 가져올 수 없습니다.

4

API:Data_formats에 설명 된대로 쿼리의 끝에 &format=fmt을 추가하십시오. 귀하의 질의는 다음과 같이됩니다 : JSON query, 예를 들면. XML, JSON 또는 기타 여러 형식을 지정할 수 있습니다.

전체 섹션을 쉽게 파싱 한 다음 HTML 형식의 출력을 웹보기로 표시 할 수 있습니다.

+0

Thanks! 그래, 나는 그것을 보았지만 반환 된 파일은 내가 검색 할 수 있었던 원시 파일보다 훨씬 큽니다. 단점은 HTML 대신 위키 마크 업에 있지만, 어쨌든 반환 된 내용을 웹보기로 렌더링 할 계획이 없다는 것입니다. 나는 프레젠테이션을 쉽게 조작 할 수 있도록 실제 데이터를 갖고 싶습니다. 그래도 응답을 주셔서 감사합니다. –

3

나는 다양한 방법으로 WP에서 많은 데이터를 긁었다. 형식은 정보가있는 하위 도메인의 유형과 입력 된시기 등 많은 요소에 따라 달라집니다. 본문은 자유 형식이며 그것을 다 쓸 수있는 간단한 방법이 없습니다. infoboxes는 수년에 걸쳐 변화 한 특별한 WP 형식으로되어 있습니다. 그것은 긁히도록 설계되지 않았습니다.

데이터베이스 백킹 WP가 다소 더 구조화되어 있습니다.

지금까지 최선의 전략은 데이터베이스 형식에 대해 알게되고 도움을 줄 수있는 도메인의 위키 백과에 연락하는 것입니다. 그들은 확실히 을 원할 때 도움을주기 위해을 원합니다. 의미 론적 형식의 WP (예 : DBPedia - http://dbpedia.org/About)를 참조하십시오.

2

파이썬은 계산합니까? ;) 은 Objective-C에서 액세스 할 수 있습니다. 그리고 근근이 살아가는 데 훌륭한 모듈이 있습니다 : 아름다운 비누 및/또는 기계화, 당신은 또한 lxml을 고려할 수 있습니다.

가 사용 YQL 당신 :

0

나는 다음을 사용하여 화면 스크랩을하지 아이폰 응용 프로그램을 가지고 DOM에 대해 XPATH 쿼리를 사용하여 웹에서 필요한 모든 정보를 얻을 수 있습니다.

개인적으로 나는 Regex를 사용하는 것보다 훨씬 좋다고 생각합니다. 그럼 다시 아주 단순한 정규식 만 알게됩니다.

관련 문제