2010-03-07 32 views
10

Tôi hiện đang cố gắng xóa một trang web có HTML có định dạng kém (thường thiếu thẻ đóng, không sử dụng các lớp hoặc id nên rất khó để chuyển thẳng đến phần tử bạn muốn, v.v.). Tôi đã sử dụng BeautifulSoup với một số thành công cho đến nay nhưng mỗi một lần và một thời gian (mặc dù khá hiếm khi), tôi chạy vào một trang mà BeautifulSoup tạo cây HTML hơi khác một chút (ví dụ) Firefox hoặc Webkit. Trong khi điều này là dễ hiểu vì định dạng của HTML lá này mơ hồ, nếu tôi đã có thể nhận được cùng một cây phân tích như Firefox hoặc Webkit sản xuất tôi sẽ có thể phân tích cú pháp dễ dàng hơn nhiều. Các sự cố thường giống như trang web mở một thẻ <b> hai lần và khi BeautifulSoup thấy thẻ thứ hai <b>, nó ngay lập tức đóng thẻ đầu tiên trong khi Firefox và Webkit giữ các thẻ <b>.Dò web bằng Python

Có thư viện cào web cho Python (hoặc thậm chí bất kỳ ngôn ngữ nào khác (tôi đang tuyệt vọng)) có thể tạo lại cây phân tích được tạo bởi Firefox hoặc WebKit (hoặc ít nhất là gần hơn so với BeautifulSoup trong trường hợp không rõ ràng) .

+0

Tại sao không sử dụng webkit bản thân? Webkit là mã nguồn mở. Có, nó sẽ mất một ít thời gian để làm quen. –

+1

Bạn đã nói với nhóm beautifulsoup chưa? Họ có thể quan tâm đến các góc như của bạn http://groups.google.com/group/beautifulsoup –

+0

Đã hỏi rất nhiều lần ... –

Trả lời

10

Sử dụng BeautifulSoup như một người thợ xây cây cho html5lib:

from html5lib import HTMLParser, treebuilders 

parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup")) 

text = "a<b>b<b>c" 
soup = parser.parse(text) 
print soup.prettify() 

Output:

<html> 
<head> 
</head> 
<body> 
    a 
    <b> 
    b 
    <b> 
    c 
    </b> 
    </b> 
</body> 
</html> 
1

Vâng, WebKit là mã nguồn mở, do đó bạn có thể sử dụng phân tích cú pháp riêng của mình (trong thành phần WebCore), nếu ngôn ngữ nào có thể chấp nhận

2

Bạn có thể lái xe một trình duyệt mà bạn lựa chọn với SeleniumRC.

3

Bạn đã thử scrapy?

Scrapy là một khuôn khổ nhanh cao cấp màn hình nạo và web bò, sử dụng để thu thập thông trang web và trích xuất dữ liệu có cấu trúc từ trang của họ. Nó có thể được sử dụng cho một loạt các mục đích , từ khai thác dữ liệu đến giám sát và kiểm tra tự động.

0

Từ các tài liệu có vẻ như ICantBelieveItsBeautifulSoup phân tích cú pháp là những gì bạn muốn:

ICantBelieveItsBeautifulSoup cũng là một lớp con của BeautifulSoup. Nó có HTML chẩn đoán tuân thủ chặt chẽ hơn với tiêu chuẩn HTML, nhưng bỏ qua cách HTML được sử dụng trong thế giới thực. Đối với dụ, đó là HTML hợp lệ để tổ <B> thẻ, nhưng trong thế giới thực một lồng nhau <B> tag hầu như luôn luôn có nghĩa là tác giả quên để đóng thẻ <B> đầu tiên. Nếu bạn gặp một người nào đó thực sự tổ chức <B> thẻ, thì bạn có thể sử dụng ICantBelieveItsBeautifulSoup.

0

này có vẻ tốt với tôi Tôi đang sử dụng nó bản thân mình: liên kết [http://code.google.com/p/webscraping/]

1

bạn có thể sử dụng phân tích cú pháp lxml, trong BeautifulSoup, và bạn sử dụng xpath để tìm dữ liệu trong trang html chưa định dạng, bạn có thể sao chép xpath khi bạn kiểm tra phần tử bằng firebug.

Bạn có thể kiểm tra hướng dẫn này: http://www.youtube.com/watch?v=PgWfF-Ut0zM

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