Googleの画像検索が返す結果のリンク:カンナで迅速にHTMLを解析中に特別のdivクラスデータを取得
<div class="rg_meta notranslate">{"cb":6,"cl":21,"cr":9,"ct":6,"id":"G9X757bOKIt_dM:","isu":"hitparade.ch","itg":0,"ity":"jpg","oh":300,"ou":"http://streamd.hitparade.ch/cdimages/jennifer_rush-i_come_undone_s.jpg","ow":296,"pt":"Jennifer Rush - I Come Undone - hitparade.ch","rid":"xArn9C5TiVuF9M","rmt":0,"rt":0,"ru":"http://hitparade.ch/song/Jennifer-Rush/I-Come-Undone-1581","s":"Jennifer Rush - I Come Undone","sc":1,"st":"Hitparade.ch","th":226,"tu":"https://encrypted-tbn0.gstatic.com/images?q\u003dtbn:ANd9GcRbLwVl711N3Q93C-SFdj1a1X6CLQIohPbb_8G9eBEJBX_bzQdC","tw":223}</div>
私が正しく、このdiv要素に(「OU」フィールドに)画像のパスを取得できますか
rg_meta
スウィフトとカンナ? 私はいくつかの変種を試しました。
// Alamofire.request...
if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8) {
for item in doc.xpath("//div[@class='rg_meta']") {
print(item.text)
print(item["ou"])
}
}
ですが、項目は常に空です。 divのこのJsonデータですか?カンナに「オウ」フィールドを手に入れる方法はありますか?おかげさまで
編集: は、XPath式をテストするためのHTMLを生成するための一例は以下のようになります。
https://www.google.com/search?q=jennifer+rush+i+come+undone&gbv=2&tbm=isch
EDIT2:
OK、Adriansの答えは正しく捉えているようですしながら、私のコードはまだ意図したとおりに動作していない、私はいくつかのより多くのデバッグを行った:
私が今見ているように、私の主な問題は、私がキャプチャしようとしているdivクラスがAlamofireによってダウンロードされていないということです。これは、これは、HTMLの本文にGoogleの返品ではないが、私は理解していない構造体の下にあるという理由が考えられます。検索結果のソースコードでそれを見ることができます。これまで
私のテストコード:
let requestUrl = "https://www.google.com/search?q=jennifer+rush+i+come+undone&gbv=2&tbm=isch"
Alamofire.request(requestUrl).responseString { response in
print("Request success/charcount: \(response.result.isSuccess) \(response.result.value?.characters.count ?? 0)")
if let responseHtml = response.result.value {
if let doc = Kanna.HTML(html: responseHtml, encoding: String.Encoding.utf8) {
for item in doc.xpath("//div[@class='rg_meta']") {
print(item.text ?? "---")
}
}
}
}
出力:
Request success/charcount: true 40830
40KのHTMLがダウンロードさが、ブラウザで表示したソースコード全体を約600Kでいます。私は特別なdivクラスの検索を行うことができるようにすべてをダウンロードする方法はありますか? 私はまた
Alamofire.request(requestUrl).responseData
と
Alamofire.download(requestUrl, to: destination)
を試してみましたが、すべては40Kのhtmlを返します。
おかげで、
はあなたがdoc.xpath内の項目のために 'すなわち(あなたのXPath式で 'notranslate' を含める必要はありません( "// divの[クラス@ = 'rg_meta notranslate']") '?xpathテスターを使って式を実行しても結果が得られません。 – toddg
'notranslate'を追加しても差はありません。 –