android - 使用 Jsoup 连接到网页
android - connecting to web page with Jsoup
我正在尝试使用 Jsoup 从名为 "text" 的 div class 网页中抓取一些文本。这是我试图获取内容的代码部分:
try {
Document doc = Jsoup.connect("http://website.com").get();
Elements div = doc.select["meta[class=text]");
String textString = div.toString();
}
catch (IOException e) {
e.printStackTrace();
}
当我 运行 activity 时,它在我尝试连接的行中显示错误。这是来自 logcat.
的内容
03-17 14:30:34.270 23413-23413/? I/art: Late-enabling -Xcheck:jni
03-17 14:30:35.170 23413-23413/com.example.goliath.pomos I/View:
ssignParent(ViewParent parent) parent is:
android.view.ViewRootImpl@fc40abe 03-17 14:30:35.370
23413-23552/com.example.goliath.pomos I/OpenGLRenderer: Initialized
EGL, version 1.4 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: FATAL
EXCEPTION: main 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: Process:
com.example.goliath.pomos, PID: 23413 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime:
android.os.NetworkOnMainThreadException 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: at
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1167)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
java.net.InetAddress.lookupHostByName(InetAddress.java:418) 03-17
14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 03-17
14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at java.net.InetAddress.getAllByName(InetAddress.java:215) 03-17
14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at
com.android.okhttp.HostResolver.getAllByName(HostResolver.java:29)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:512)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:493)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
org.jsoup.helper.HttpConnection.execute(HttpConnection.java:205) 03-17
14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:194) 03-17
14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at
com.example.goliath.pomos.Koli.onNavigationItemSelected(Koli.java:120)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
android.support.design.widget.NavigationView.onMenuItemSelected(NavigationView.java:150)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
android.support.v7.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
android.support.design.internal.NavigationMenuPresenter.onClick(NavigationMenuPresenter.java:300)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
android.view.View.performClick(View.java:4768) 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: at
android.view.View$PerformClick.run(View.java:19692) 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: at
android.os.Handler.handleCallback(Handler.java:739) 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: at
android.os.Handler.dispatchMessage(Handler.java:95) 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: at
android.os.Looper.loop(Looper.java:135) 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: at
android.app.ActivityThread.main(ActivityThread.java:5538) 03-17
14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at java.lang.reflect.Method.invoke(Native Method) 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: at
java.lang.reflect.Method.invoke(Method.java:372) 03-17 14:30:37.580
23413-23413/com.example.goliath.pomos E/AndroidRuntime: at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
03-17 14:30:37.580 23413-23413/com.example.goliath.pomos
E/AndroidRuntime: at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753) 03-17
14:30:37.610 23413-23413/com.example.goliath.pomos I/Process: Sending
signal. PID: 23413 SIG: 9
这是我第一次使用 Jsoup,如有任何帮助,我们将不胜感激。
当应用程序试图在主线程上执行网络操作时抛出此异常。您应该 运行 您在 AsyncTask 中的代码,或者禁用检查(错误的选择):
AsyncTask:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new ParsePageTask().execute("http://whosebug.com/");
}
class ParsePageTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
try {
Document doc = Jsoup.connect(urls[0]).get();
Elements div = doc.select("title");
return div.toString();
} catch (Exception ignored) {
}
return "";
}
protected void onPostExecute(String result) {
// process results
((TextView) findViewById(R.id.text)).setText(result);
}
}
}
"Network on main thread" 策略禁用:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
...
Document doc = Jsoup.connect("http://website.com").get();
此外,您还应检查 AndroidManifest.xml 文件中的互联网权限:
<uses-permission android:name="android.permission.INTERNET"/>
两期:
在 Android 中,您不能在主线程中使用网络。您需要创建一个 AsyncTask 才能使用 Jsoup.connect(URL)
方法。
如果你想select一个div
的名字属性text
,那么你需要使用select(div[name=text])
。你做了什么,select 元素带有一个名为 meta 的标签并且正好携带一个名为 text
.
的 class
我正在尝试使用 Jsoup 从名为 "text" 的 div class 网页中抓取一些文本。这是我试图获取内容的代码部分:
try {
Document doc = Jsoup.connect("http://website.com").get();
Elements div = doc.select["meta[class=text]");
String textString = div.toString();
}
catch (IOException e) {
e.printStackTrace();
}
当我 运行 activity 时,它在我尝试连接的行中显示错误。这是来自 logcat.
的内容03-17 14:30:34.270 23413-23413/? I/art: Late-enabling -Xcheck:jni 03-17 14:30:35.170 23413-23413/com.example.goliath.pomos I/View: ssignParent(ViewParent parent) parent is: android.view.ViewRootImpl@fc40abe 03-17 14:30:35.370 23413-23552/com.example.goliath.pomos I/OpenGLRenderer: Initialized EGL, version 1.4 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: FATAL EXCEPTION: main 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: Process: com.example.goliath.pomos, PID: 23413 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: android.os.NetworkOnMainThreadException 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1167) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at java.net.InetAddress.lookupHostByName(InetAddress.java:418) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at java.net.InetAddress.getAllByName(InetAddress.java:215) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at com.android.okhttp.HostResolver.getAllByName(HostResolver.java:29) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:512) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:493) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:205) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:194) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at com.example.goliath.pomos.Koli.onNavigationItemSelected(Koli.java:120) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.support.design.widget.NavigationView.onMenuItemSelected(NavigationView.java:150) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.support.v7.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.support.design.internal.NavigationMenuPresenter.onClick(NavigationMenuPresenter.java:300) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.view.View.performClick(View.java:4768) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:19692) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5538) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime:
at java.lang.reflect.Method.invoke(Native Method) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958) 03-17 14:30:37.580 23413-23413/com.example.goliath.pomos E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753) 03-17 14:30:37.610 23413-23413/com.example.goliath.pomos I/Process: Sending signal. PID: 23413 SIG: 9
这是我第一次使用 Jsoup,如有任何帮助,我们将不胜感激。
当应用程序试图在主线程上执行网络操作时抛出此异常。您应该 运行 您在 AsyncTask 中的代码,或者禁用检查(错误的选择):
AsyncTask:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new ParsePageTask().execute("http://whosebug.com/");
}
class ParsePageTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
try {
Document doc = Jsoup.connect(urls[0]).get();
Elements div = doc.select("title");
return div.toString();
} catch (Exception ignored) {
}
return "";
}
protected void onPostExecute(String result) {
// process results
((TextView) findViewById(R.id.text)).setText(result);
}
}
}
"Network on main thread" 策略禁用:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
...
Document doc = Jsoup.connect("http://website.com").get();
此外,您还应检查 AndroidManifest.xml 文件中的互联网权限:
<uses-permission android:name="android.permission.INTERNET"/>
两期:
在 Android 中,您不能在主线程中使用网络。您需要创建一个 AsyncTask 才能使用
Jsoup.connect(URL)
方法。如果你想select一个
div
的名字属性text
,那么你需要使用select(div[name=text])
。你做了什么,select 元素带有一个名为 meta 的标签并且正好携带一个名为text
. 的 class