저는 Watir을 사용하여 웹 사이트에서 검색 결과를 긁어내어 CSV 파일에 입력합니다. 검색을 실행하면 결과가 스팬 클래스로 나뉩니다. 그래서 HTML은 같은 모양 :Watir을 사용하여 웹을 긁을 때 동일한 클래스에서 결과를 파싱하고 별도의 CSV 셀에 입력하려면 어떻게해야합니까?
<span class="sn_auth_name">foo</span>
<span class="sn_target_lang">English</span>
과 같은 내 코드는 같습니다
sn_auth_name = row.xpath('span[@class="sn_auth_name"]/text()').text.strip
sn_target_lang = row.xpath('span[@class="sn_target_lang"]/text()').text.strip
CSV.open("file.csv", "a") do |csv|
csv << [sn_auth_name, sn_target_lang]
문제는 검색 결과의 일부, 같은 클래스에 할당 된 여러 항목이 있다는 것입니다. 즉, 때로는 sn_auth_name
하나만 존재하며 때로는 세 개가 있습니다! 현재 두 결과 모두 내 CSV 파일의 동일한 셀에 들어가 있습니다.
같은 클래스에 여러 결과가 할당되는 경우가 종종 있습니다. 두 번째 (또는 세 번째) 결과가 별도의 셀에 입력되는 솔루션?
감사합니다.
누군가가 자세한 내용을 요청했습니다. 따라서 나는 일반적으로 얻는 결과를 얻었습니다.
<table class="restable"><tr>
<td class="res1">1/1</td>
<td class="res2">
<span class="sn_auth_name">Imām</span>,
<span class="sn_auth_firstname">Abū Bakr</span>:
<span class="sn_target_title">Al-Kalām rasmāl</span> [
<span class="sn_target_lang">Arabic</span>]/
<span class="sn_transl_name">Ḥijāzī al-Sayyid</span>,
<span class="sn_transl_firstname">Muṣṭafā</span>/
<span class="sn_pub">
<span class="place">Al-Qāhirah</span>:
<span class="publisher">Al-Majlis al-Alā lil-Thaqāfah</span> [
<span class="sn_country">Egypt</span>]</span>,
<span class="sn_year">2000</span>.
<span class="sn_pagination">588 p.</span>
<span class="sn_orig_title">Magana jarice</span> [
<span class="sn_orig_lang">Afrikaans</span>]
</td></tr>
</table>
캡쳐하려는 모든 텍스트에 대해 하나의 클래스 유형이 있기 때문에 긁으면 아무런 문제가 없습니다. 그러나 모든 너무 자주, 나는 그 결과 다음과 같이 얻을 :
<tr>
<td class="res1">7/8</td>
<td class="res2">
<span class="sn_auth_name">Plenge</span>,
<span class="sn_auth_firstname">Vagn</span>;
<span class="sn_auth_name">Wyk</span>,
<span class="sn_auth_firstname">Chris van</span>:
<span class="sn_target_title">Opbrud</span> [
<span class="sn_target_lang">Danish</span>]/
<span class="sn_transl_name">Hansen</span>,
<span class="sn_transl_firstname">Finn Holten</span>;
<span class="sn_transl_name">Madelung</span>,
<span class="sn_transl_firstname">Marianne</span>;
<span class="sn_transl_name">Seiketso</span>,
<span class="sn_transl_firstname">Helen Gaohenngwe</span>/
<span class="sn_pub">
<span class="place">Frederiksberg</span>:
<span class="publisher">AKS</span>,
<span class="place">Frederiksberg</span>:
<span class="publisher">Hjulet</span> [
<span class="sn_country">Denmark</span>]</span>,
<span class="sn_year">2000</span>.
<span class="sn_pagination">247 p.</span> [
<span class="sn_orig_lang">Afrikaans</span>], [
<span class="sn_orig_lang">English</span>]
</td></tr>
여기에, 예를 들어, sn_auth_name
에 대해 여러 항목이 있습니다. 내 CSV 파일에서 끝나는 부분은 PlengeWyk
인 셀입니다. 이상적인 스크립트는 sn_auth_name2
값을 만들고이를 별도의 셀 (예 : Plenge
및 Wyk
)에 기록하도록하는 것입니다.
의견이 있으십니까?
행이 가질 수있는 다른 레이아웃과 각각에 대해 예상되는 결과를 제공하면 도움이됩니다. –
저스틴입니다. 출력 예제를 추가했습니다. – NCG
코드 예제에서 정확히'row'는 무엇입니까? Watir 요소에는'xpath' 메소드가 없습니다.Nokogiri를 사용하여 HTML을 구문 분석합니까? –