Android 使用Jsoup和AsyncTask抓取google搜索首页失败?

Android 使用Jsoup和AsyncTask抓取google搜索首页失败?,android,android-asynctask,jsoup,screen-scraping,Android,Android Asynctask,Jsoup,Screen Scraping,我一直在使用Jsoup从google搜索中获取某些单词,但在Jsoup查询过程中我无法理解 它正在成功地进入doInBackground方法,但它不会在搜索中打印每个链接的标题和正文 我猜我从doc.select(links)得到的列表是空的。 这就带来了查询语法问题 值-它是关键字搜索,在我的例子中,它是一个真正起作用的条形码。这是我的建议 这里是来自另一个类的异步调用: String url = "https://www.google.com/search?q="; if (!v

我一直在使用Jsoup从google搜索中获取某些单词,但在Jsoup查询过程中我无法理解

它正在成功地进入doInBackground方法,但它不会在搜索中打印每个链接的标题和正文

我猜我从doc.select(links)得到的列表是空的。 这就带来了查询语法问题

值-它是关键字搜索,在我的例子中,它是一个真正起作用的条形码。这是我的建议

这里是来自另一个类的异步调用:

String url = "https://www.google.com/search?q=";

     if (!value.isEmpty())
     {
         url = url + value + " price" + "&num10";
         Scrape_Asynctasks task = new Scrape_Asynctasks();
         task.execute(url);
     }
下面是异步任务本身:

public class Scrape_Asynctasks extends AsyncTask<String, Integer, String>
{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... strings) {
        try
        {
            Log.i("IN", "ASYNC");

            final Document doc = Jsoup
                .connect(strings[0])
                .userAgent("Jsoup client")
                .timeout(5000).get();

            Elements links = doc.select("li[class=g]");

            for (Element link : links)
            {
                Elements titles = link.select("h3[class=r]");
                String title = titles.text();

                Elements bodies = link.select("span[class=st]");
                String body = bodies.text();

                Log.i("Title: ", title + "\n");
                Log.i("Body: ", body);
            }
        }

        catch (IOException e)
        {
            Log.i("ERROR", "ASYNC");
        }
        return "finished";
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
    }
}
public类Scrape\u Asynctasks扩展了AsyncTask
{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串背景(字符串…字符串){
尝试
{
Log.i(“IN”,“ASYNC”);
最终文件doc=Jsoup
.connect(字符串[0])
.userAgent(“Jsoup客户端”)
.timeout(5000.get();
元素链接=doc.select(“li[class=g]”);
用于(元素链接:链接)
{
元素标题=链接。选择(“h3[class=r]”;
字符串title=titles.text();
Elements body=link.select(“span[class=st]”);
字符串body=body.text();
Log.i(“标题:”,标题+“\n”);
Log.i(“正文:”,正文);
}
}
捕获(IOE异常)
{
Log.i(“错误”、“异步”);
}
返回“完成”;
}
@凌驾
受保护的void onProgressUpdate(整型…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
}
}
  • 不要使用“jsoupclient”作为用户代理字符串。使用与浏览器相同的字符串,例如“Mozilla/5.0(Windows NT 6.1;Win64;x64;rv:68.0)Gecko/20100101 Firefox/68.0”。一些网站(包括谷歌)不喜欢它
  • 您的第一个选择器应该是
    .g
    元素链接=doc.select(“.g”)
  • 这些网站使用javascript,因此您无法在浏览器中获得所有结果。
    您可以在浏览器中禁用JS并查看差异
  • 不要使用“jsoupclient”作为用户代理字符串。使用与浏览器相同的字符串,例如“Mozilla/5.0(Windows NT 6.1;Win64;x64;rv:68.0)Gecko/20100101 Firefox/68.0”。一些网站(包括谷歌)不喜欢它
  • 您的第一个选择器应该是
    .g
    元素链接=doc.select(“.g”)
  • 这些网站使用javascript,因此您无法在浏览器中获得所有结果。
    您可以在浏览器中禁用JS并查看差异