php如何抓取网页内容(【·简介】怎么做吗?答案这是一个1)
优采云 发布时间: 2021-10-24 20:03php如何抓取网页内容(【·简介】怎么做吗?答案这是一个1)
栏目:类库·
介绍本文文章主要介绍如何只显示部分网页内容(swift)(示例代码)及相关经验技巧。文章约3904字,浏览量426,点赞1,值得参考。!
我是编码新手(根本没有编程语言背景)。我正在努力学习。我想创建一个简单的天气应用程序,一旦用户进入城市,天气信息就会显示在文本中。我从中获取内容。我已经知道如何加载 Web 内容,但我只想显示页面内容的一个片段(一段),而不是整个页面。有人可以告诉我该怎么做吗?
{
import UIKit
class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var cityText: UITextField!
@IBOutlet weak var webContent: UIWebView!
@IBAction func GoButtonPressed(sender: AnyObject) {
let url = NSURL (string: "http://www.weather-forecast.com");
let requestObj = NSURLRequest(URL: url!);
webContent.loadRequest(requestObj);
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
}
回答
这是一个简单的视图控制器的例子,它只加载了 网站 的一部分。控制器有一个方法来选择一个 DOM 元素并只显示该元素。它非常简单,但功能强大,足以说明如何进一步开展这项工作。
import UIKit
import JavaScriptCore
import WebKit
class TestViewController: UIViewController {
private weak var webView: WKWebView!
private var userContentController: WKUserContentController!
override func viewDidLoad() {
super.viewDidLoad()
createViews()
loadPage("https://dribbble.com/", partialContentQuerySelector: ".dribbbles.group")
}
private func createViews() {
userContentController = WKUserContentController()
let configuration = WKWebViewConfiguration()
configuration.userContentController = userContentController
let webView = WKWebView(frame: view.bounds, configuration: configuration)
webView.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addSubview(webView)
let views: [String: AnyObject] = ["webView": webView, "topLayoutGuide": topLayoutGuide]
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[topLayoutGuide][webView]|", options: .allZeros, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[topLayoutGuide][webView]|", options: .allZeros, metrics: nil, views: views))
self.webView = webView
}
private func loadPage(urlString: String, partialContentQuerySelector selector: String) {
userContentController.removeAllUserScripts()
let userScript = WKUserScript(source: scriptWithDOMSelector(selector),
injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
forMainFrameOnly: true)
userContentController.addUserScript(userScript)
let url = NSURL(string: urlString)!
webView.loadRequest(NSURLRequest(URL: url))
}
private func scriptWithDOMSelector(selector: String) -> String {
let script =
"var selectedElement = document.querySelector('(selector)');" +
"document.body.innerHTML = selectedElement.innerHTML;"
return script
}
}
上例中显示的视图控制器只加载照片,在 网站 内运行设计部分。
另一个答案
您将无法轻松做到这一点 - UIWebView 没有任何 API 来公开它正在加载的网页的结构,也没有控制/允许页面的部分加载。
也许你可以抓取页面的内容并显示它,但是你会在将它加载到 UIWebView 之前这样做,并且在你抓取它之后,Web视图可能不是最好的显示它的方式。
进行一些搜索 HTML 和网页抓取以了解该术语的含义。
或者,如果你知道网页内容的结构,你可以在 UIWebView 加载时将 javascript 注入到页面中,javascript 会阻止页面的其他部分在以后显示(但如果你改变了它的 html 的结构)您的 JavaScript 可能不再有效)
无论哪种方式,对于初学者来说,两者似乎都有些过于复杂,但除非您能够快速而称职地掌握它,否则您需要学习很多东西。
另一个答案
您可以在应用程序中安装天气 API,而不是从 网站 获取数据。这可能更快或更容易,因为大多数天气 API 可以选择要显示的信息。
有关如何安装天气 API 的更多信息,请访问此网站。
希望我解决了你的问题,托比