2011-09-29 19 views
10

Próbuję pobrać zawartość tabeli z wepage. Potrzebuję zawartości, ale nie tagów <tr></tr>. Nie potrzebuję nawet "tr" lub "td" tylko treści. dla npUsuwanie znaczników html w sed lub podobnych

<td> I want only this </td> 
<tr> and also this </tr> 
<TABLE> only texts/numbers in between tags and not the tags. </TABLE> 

też chciałbym postawić pierwsze wyjście kolumny jak to w nowym pliku csv kolumna1, Info1, Info2, info3 coumn2, Info1, Info2, info3

Próbowałem sed do usuniętych wzorców <tr><td>, ale kiedy pobieram tabelę, są jeszcze inne znaczniki, takie jak <color><span> itd. więc chcę usunąć wszystkie znaczniki; w skrócie wszystko dzięki < i>.

+1

Jaka jest regularność treści? Możesz użyć ['lynx'] (http://lynx.browser.org/), aby pobrać stronę i przekonwertować ją na tekst, a następnie przeanalizować zwykły tekst. Trudno powiedzieć bez większej szczegółowości, skrobanie ekranu jest zwykle wyborem pomiędzy różnymi brzydkimi atakami. –

+0

OK rozwiązało pierwszy problem ** sed -e 's/<.*> // g' input **. i do powyższego komentarza przeszukałem strony i zdrapałem tylko część stołu. więc plik zawiera tylko czyste znaczniki tabel i dane. coś w stylu rutyny czasu egzaminu. – user913492

Odpowiedz

17

usunie wszystkie znaczniki, ale warto je zastąpić spacją, aby znaczniki znajdujące się obok siebie nie działały razem: stanie się: onetwo. Więc możesz zrobić sed 's/<[^>]\+>/ /g', aby wyprowadzić one two (cóż, właściwie one two).

To powiedziane, chyba że potrzebujesz tylko nieprzetworzonego tekstu, i wygląda na to, że próbujesz przekształcić dane po usunięciu tagów, ale język skryptowy, taki jak Perl, może być bardziej odpowiednim narzędziem do robienia tego.

Jako, że mu jest zbyt krótki, wspomniany skrobanie HTML może być nieco ryzykowne, używając czegoś, co faktycznie analizuje kod HTML, byłby to najlepszy sposób na zrobienie tego. PHPs DOM API jest całkiem dobre dla tego rodzaju rzeczy.

+0

dzięki .. to było pomocne .. – user913492

2

Oryginał:

Mac Terminal REGEX zachowuje się nieco inaczej. Udało mi się to zrobić na komputerze Mac za pomocą następującego przykładu:

$ curl google.com | sed 's/<[^>]*>//g' 
% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 219 100 219 0  0 385  0 --:--:-- --:--:-- --:--:-- 385 

301 Moved 
301 Moved 
The document has moved 
here. 

$ bash --version 
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14) 
Copyright (C) 2007 Free Software Foundation, Inc. 

Edit:

Właśnie przez wzgląd na wyjaśnienie przez origional wyglądało:

$ curl googl.com 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>301 Moved</TITLE></HEAD><BODY> 
<H1>301 Moved</H1> 
The document has moved 
<A HREF="http://www.google.com/">here</A>. 
</BODY></HTML> 

Również irytujące nagłówka curl może być pozbyć się opcji -s:

$ curl -s google.com | sed 's/<[^>]*>//g' 

301 Moved 
301 Moved 
The document has moved 
here. 

$ 
Powiązane problemy