2017-02-06 1 views
2

나는 Scrapy를 사용하여 뉴스 사이트에서 뉴스 기사의 텍스트를 추출합니다. 나는 <p> 태그 내의 모든 텍스트가 실제 기사라고 가정합니다. (어떤이 반드시 안전한 가정은 아니지만, 내가 함께 일하고 있어요 무엇)을 <p> 모든 태그를 찾으려면 Scrapy 날과 같이 CSS 선택기를 사용할 수 있습니다 :임의로 중첩 된 HTML에서 모든 텍스트 추출

response.css("p::text") 

문제는 소식이다 사이트과 같이, 자신의 기사에 마크 업을 많이 넣어 좋아 :

<p> 
    Senator <a href="/people/senator_whats_their_name">What&#39s-their-name</a> is <em>furious</em> about politics! 
</p> 

달리 모든 서식을 텍스트를 추출하고 제거하는 Scrapy 내에서 몇 가지 간단한 방법으로, CSS를 선택이 있는가, 또는, 그 결과 그래서 이 같은?

<p> 
    <span class="some-annoying-markup"><a href="who cares"><em>Wow this link must be important </em></a></span> 
<p> 

그리고 나는 아직도

Wow this link must be important 

내가이는 것을 이해 텍스트를 추출 할 :

Senator What's-their-name is furious about politics! 

문제는 이러한 태그는 이론적으로 임의로 중첩 될 수 있다는 것입니다 HTML 페이지에서 내용을 추출하는 아주 순진한 방법이지만이 질문의 범위를 벗어납니다. 이 작업을 수행하는 더 간단한 방법이 있다면 제안을하겠습니다. 그러나이 주제에서 발견 한 내용은 여기에서 제시 한 것보다 훨씬 복잡해 보입니다. 그래서 저는 문제를 해결하는 데 관심이 있습니다. 제시했다.

답변

1
In [7]: sel = Selector(text='''<p> 
    ...:  Senator <a href="/people/senator_whats_their_name">What&#39s-their-n 
    ...: ame</a> is <em>furious</em> about politics! 
    ...: </p>''') 

In [9]: sel.xpath('normalize-space(//p)').extract_first() 
Out[9]: "Senator What's-their-name is furious about politics!" 

OR :

In [10]: sel = Selector(text='''<p> 
    ...:  <span class="some-annoying-markup"><a href="who cares"><em>Wow this 
    ...: link must be important </em></a></span> 
    ...: <p>''') 

In [11]: sel.xpath('normalize-space(//p)').extract_first() 
Out[11]: 'Wow this link must be important' 

사용 XPath는의 string 기능은 태그 아래에있는 모든 텍스트를 연결할 수 있습니다.

normalize-space은 문자열의 공백을 제거합니다.

관련 문제