2011-09-29 34 views
10

Tôi đang cố gắng tìm nạp nội dung của bảng từ một wepage. Tôi jsut cần nội dung chứ không phải các thẻ <tr></tr>. Tôi thậm chí không cần "tr" hoặc "td" chỉ là nội dung. cho ví dụ:Xóa các thẻ html trong sed hoặc tương tự

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

tôi cũng muốn đưa sản lượng cột đầu tiên như thế này trong một tập tin csv mới column1, info1, INFO2, info3 coumn2, info1, INFO2, info3

Tôi đã cố gắng sed để xóa patters <tr><td> nhưng khi tôi tìm nạp bảng cũng có các thẻ khác như <color><span> v.v. vì vậy tôi muốn xóa tất cả các thẻ; trong tất cả mọi thứ ngắn với < và>.

+1

Nội dung thường xuyên như thế nào? Bạn có thể sử dụng ['lynx'] (http://lynx.browser.org/) để lấy trang và chuyển đổi nó thành văn bản và sau đó phân tích cú pháp văn bản thuần túy. Khó nói mà không có nhiều chi tiết cụ thể hơn, việc cạo màn hình có xu hướng là sự lựa chọn giữa các hacks xấu xí khác nhau. –

+0

ok điều này giải quyết được vấn đề đầu tiên ** sed -e 's/<.*> // g' input **. và để bình luận ở trên tôi đã wget'ed các trang và chỉ cạo phần bảng. do đó, tệp chỉ chứa thẻ và dữ liệu bảng sạch. một cái gì đó giống như một thói quen bảng thời gian thi. – user913492

Trả lời

17

sed 's/<[^>]\+>//g' sẽ xóa tất cả các thẻ ra, nhưng bạn có thể muốn thay thế chúng bằng dấu cách để các thẻ cạnh nhau không chạy cùng nhau: <td>one</td><td>two</td> trở thành: onetwo. Vì vậy, bạn có thể làm sed 's/<[^>]\+>/ /g' vì vậy nó sẽ xuất one two (tốt, thực sự one two).

Điều đó nói rằng trừ khi bạn chỉ cần văn bản thô và có vẻ như bạn đang cố gắng thực hiện một số chuyển đổi cho dữ liệu sau khi loại bỏ các thẻ, ngôn ngữ kịch bản như Perl có thể là công cụ phù hợp hơn.

Vì mu được đề cập quá ngắn nên việc cắt xén HTML có thể hơi khó khăn, sử dụng thứ gì đó thực sự phân tích cú pháp HTML cho bạn sẽ là cách tốt nhất để làm điều này. PHPs DOM API là khá tốt cho những thứ này.

+0

cảm ơn .. đó là hữu ích .. – user913492

2

Bản gốc:

Máy Mac REGEX hoạt động hơi khác một chút. Tôi đã có thể làm điều này trên máy Mac của tôi bằng cách sử dụng ví dụ sau:

$ 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:

Chỉ cần làm rõ vì các origional trông giống như:

$ 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> 

Ngoài ra curl tiêu đề gây phiền nhiễu có thể loại bỏ việc sử dụng tùy chọn -s:

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

301 Moved 
301 Moved 
The document has moved 
here. 

$ 
Các vấn đề liên quan