Tôi là một newbie Swift. Tôi cần một cái gì đó giống như BeautifulSoup Python trong dự án Swift iOS. Chính xác, tôi cần phải có được tất cả href
của <a>
kết thúc bằng ".txt"
. Các bước mà tôi nên thực hiện là gì?thực hành tốt nhất để phân tích cú pháp html trong nhanh chóng như thế nào?
Trả lời
Có một số thư viện tốt đẹp của HTML Parsing sử dụng Swift
và Objective-C
như sau:
Hãy xem trong các ví dụ sau đây trong bốn thư viện được đăng trên đây, chủ yếu là phân tích cú pháp sử dụng XPath 2.0:
hpple:
let data = NSData(contentsOfFile: path)
let doc = TFHpple(htmlData: data)
if let elements = doc.searchWithXPathQuery("//a/@href[ends-with(.,'.txt')]") as? [TFHppleElement] {
for element in elements {
println(element.content)
}
}
NDHpple:
let data = NSData(contentsOfFile: path)!
let html = NSString(data: data, encoding: NSUTF8StringEncoding)!
let doc = NDHpple(HTMLData: html)
if let elements = doc.searchWithXPathQuery("//a/@href[ends-with(.,'.txt')]") {
for element in elements {
println(element.children?.first?.content)
}
}
Kanna (XPath và CSS Selectors):
let html = "<html><head></head><body><ul><li><input type='image' name='input1' value='string1value' class='abc' /></li><li><input type='image' name='input2' value='string2value' class='def' /></li></ul><span class='spantext'><b>Hello World 1</b></span><span class='spantext'><b>Hello World 2</b></span><a href='example.com'>example(English)</a><a href='example.co.jp'>example(JP)</a></body>"
if let doc = Kanna.HTML(html: html, encoding: NSUTF8StringEncoding) {
var bodyNode = doc.body
if let inputNodes = bodyNode?.xpath("//a/@href[ends-with(.,'.txt')]") {
for node in inputNodes {
println(node.contents)
}
}
}
Fuzi (XPath và CSS Selectors):
let html = "<html><head></head><body><ul><li><input type='image' name='input1' value='string1value' class='abc' /></li><li><input type='image' name='input2' value='string2value' class='def' /></li></ul><span class='spantext'><b>Hello World 1</b></span><span class='spantext'><b>Hello World 2</b></span><a href='example.com'>example(English)</a><a href='example.co.jp'>example(JP)</a></body>"
do {
// if encoding is omitted, it defaults to NSUTF8StringEncoding
let doc = try HTMLDocument(string: html, encoding: NSUTF8StringEncoding)
// XPath queries
for anchor in doc.xpath("//a/@href[ends-with(.,'.txt')]") {
print(anchor.stringValue)
}
} catch let error {
print(error)
}
Chức năng ends-with
là một phần của Xpath 2.0.
SwiftSoup (Selectors CSS):
do{
let doc: Document = try SwiftSoup.parse("...")
let links: Elements = try doc.select("a[href]") // a with href
let pngs: Elements = try doc.select("img[src$=.png]")
// img with src ending .png
let masthead: Element? = try doc.select("div.masthead").first()
// div with class=masthead
let resultLinks: Elements? = try doc.select("h3.r > a") // direct a after h3
} catch Exception.Error(let type, let message){
print(message)
} catch {
print("error")
}
Tôi hy vọng điều này sẽ giúp bạn.
Bạn có thể thử nhanh chóng-html-phân tích cú pháp này:
https://github.com/tid-kijyun/Swift-HTML-Parser
Nó sẽ giúp rất nhiều.
Và để nhận html của bạn từ một txt bạn có thể:
let file = "file.txt"
if let dirs : [String] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String] {
let dir = dirs[0] //documents directory
let path = dir.stringByAppendingPathComponent(file);
let html = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)
Edit:
Để có được những gì bạn cần bạn có thể sử dụng như là dụ:
import Foundation
let html = "theHtmlYouWannaParse"
var err : NSError?
var parser = HTMLParser(html: html, error: &err)
if err != nil {
println(err)
exit(1)
}
var bodyNode = parser.body
if let inputNodes = bodyNode?.findChildTags("b") {
for node in inputNodes {
println(node.contents)
}
}
if let inputNodes = bodyNode?.findChildTags("a") {
for node in inputNodes {
println(node.getAttributeNamed("href")) //<- Here you would get your files link
}
}
Cảm ơn bạn. Tôi không cần trích xuất html từ txt. Tôi cần trích xuất .txt hrefs từ html qua trình phân tích cú pháp của bạn: 'Da TXT -> http: // foo.com/bar.txt' – amazingbasil
@amazingbasil Tôi đã chỉnh sửa câu trả lời của mình, hy vọng nó sẽ giúp bạn ngay bây giờ. :) –
Hãy thử SwiftSoup, một cổng jsoup để Swift.
let html: String = "<a id=1 href='?foo=bar&mid<=true'>One</a> <a id=2 href='?foo=bar<qux&lg=1'>Two</a>";
let els: Elements = try SwiftSoup.parse(html).select("a");
for element: Element in els.array(){
print(try element.attr("href"))
}
Công việc tốt, Tài liệu có thể hơi rõ ràng. Thông tin hiện tại không chỉ đủ để bắt đầu. Làm thế nào để thực hiện Hành động thông qua đối tượng tài liệu và sử dụng biểu mẫu sẽ là một khởi đầu tuyệt vời –
@m Các tài liệu khác là trên phần Wiki nhưng tôi đang viết nó. – Scinfu
@Scinfu: Nó có hỗ trợ Swift 2 không? – user484691
- 1. xml phân tích cú pháp trong iOS nhanh chóng
- 2. XML phân tích cú pháp trong nhanh chóng
- 3. Nhanh chóng phân tích cú pháp NLTK thành cây cú pháp
- 4. Trình phân tích cú pháp HTML python HTML nhanh
- 5. Cách tốt nhất/nhanh nhất để viết trình phân tích cú pháp trong C#
- 6. Phân tích cú pháp HTML HTML
- 7. Cách tốt nhất để phân tích cú pháp html trong tập lệnh google apps
- 8. Phân tích cú pháp HTML giống như jquery bằng Python?
- 9. Trình phân tích cú pháp HTML DOM nào hoạt động tốt nhất trên Android?
- 10. HTML để phân tích cú pháp/script thực hiện lệnh
- 11. Làm cách nào để tải hình ảnh từ phân tích cú pháp nhanh chóng?
- 12. Thư viện tốt nhất để phân tích cú pháp HTML bằng Python 3 và ví dụ?
- 13. Tạo trình phân tích cú pháp Brainfuck, phương pháp phân tích cú pháp vòng lặp tốt nhất là gì?
- 14. Phân tích cú pháp HTML trong perl
- 15. Thực hành tốt nhất để phân tích cú pháp và xác thực số điện thoại di động
- 16. Bạn sẽ phân tích cú pháp Markdown như thế nào?
- 17. Trình phân tích cú pháp XML tốt nhất cho PHP
- 18. PHP tags phân tích cú pháp HTML
- 19. BeautifulSoup HTML bảng phân tích cú pháp
- 20. Phân tích cú pháp CSV nhanh
- 21. Lỗi phân tích cú pháp HTML
- 22. Laravel phân tích cú pháp tệp .env như thế nào?
- 23. libxml2 Phân tích cú pháp HTML
- 24. Trình phân tích cú pháp JSON tốt nhất cho Qt?
- 25. Phân tích cú pháp tài liệu HTML/XML hoạt động như thế nào?
- 26. Kết hợp phân tích cú pháp phân tích cú pháp, phân tích cú pháp và phân tích cú pháp rừng
- 27. Trình phân tích cú pháp tốt nhất cho C#?
- 28. Phân tích cú pháp HTML với Erlang
- 29. Trình phân tích cú pháp HTML
- 30. Phân tích cú pháp HTML với OCaml
.. tên của "Swift-HTML-Parser" bây giờ là Kanna (鉋) –
@FrancoRondini Cảm ơn bạn đã quan sát, trả lời cập nhật :) –
Tôi nhận được 'sử dụng không rõ ràng của init (HTMLData:)' mọi lúc. Cố gắng rối tung xung quanh với 'như!' Và ':' và tất cả mọi thứ nhưng tôi không thể làm cho nó hoạt động. Bất kỳ ý tưởng? Tôi ghét swift – user2161301