Tôi là người mới sử dụng python và tôi cần trợ giúp về cú pháp để tìm và lặp qua thẻ html bằng cách sử dụng lxml. Dưới đây là các trường hợp sử dụng mà tôi đang xử lý:Cần trợ giúp cú pháp python lxml để phân tích cú pháp html
Tệp HTML được định dạng khá tốt (nhưng không hoàn hảo). Có nhiều bảng trên màn hình, một bảng chứa một tập hợp các kết quả tìm kiếm và một bảng cho đầu trang và chân trang. Mỗi hàng kết quả chứa một liên kết cho chi tiết kết quả tìm kiếm.
tôi cần phải tìm bảng giữa với các hàng kết quả tìm kiếm (cái này tôi đã có thể tìm ra):
self.mySearchTables = self.mySearchTree.findall(".//table") self.myResultRows = self.mySearchTables[1].findall(".//tr")
tôi cần phải tìm các liên kết chứa trong bảng này (điều này là nơi tôi bị kẹt):
for searchRow in self.myResultRows: searchLink = patentRow.findall(".//a")
Nó dường như không thực sự xác định được các yếu tố liên kết.
Tôi cần văn bản thuần túy của liên kết. Tôi tưởng tượng nó sẽ là một cái gì đó như
searchLink.text
nếu tôi thực sự có các yếu tố liên kết ở nơi đầu tiên.
Cuối cùng, trong tham chiếu API thực tế cho lxml, tôi không thể tìm thấy thông tin về tìm kiếm và cuộc gọi tìm kiếm. Tôi lượm lặt những thứ này từ những mã tôi tìm thấy trên google. Tôi có thiếu một cái gì đó về làm thế nào để có hiệu quả tìm và lặp qua các thẻ HTML bằng cách sử dụng lxml?
Yay! Đúng thứ tôi cần. Tôi giải thích cssselect để thực sự yêu cầu các phần tử để có một lớp css đã khai báo. Logic tìm kiếm lồng nhau chỉ là những gì tôi cần! Cảm ơn bạn Van Gale! –
Trang này khuyên bạn nên sử dụng iterchildren và iterdescendants với tùy chọn thẻ. http://www.ibm.com/developerworks/xml/library/x-hiperfparse/#N10239 – endolith
Câu trả lời hay, nhưng là một câu hỏi nhỏ - tại sao '.// tr/*/a' thay vì' .// tr // a'? Các cựu sẽ không tìm thấy bất cứ điều gì với một thẻ intervening thêm, tức là. '