如何使用querySelector进行网络抓取并在Flutter中的“文本”小部件中显示信息?

时间:2019-05-09 15:24:03

标签: json web-scraping dart flutter

我已经设法解决了大约两天,但我终生无法解决,所以我会尽力在这里提出我的问题:

所以基本上,我要做的是使用querySelector从网站收集信息(例如:document.querySelectorAll('td.title> a');“,然后将该信息放入“文本”小部件中。如何我要去做吗?

1 个答案:

答案 0 :(得分:0)

Flutter中的Scraping与Dart相比并没有什么特别的。 请记住,用100%Dart编写的所有内容都可以在Flutter中使用。

您可以按照本指南进行操作,并说明使用Dart进行刮擦的基本知识 https://itnext.io/write-your-first-web-scraper-in-dart-243c7bb4d05

基本步骤是:

1)发出http请求并将其存储在变量中

2)使用解析器解析响应主体(从html / parser lib导入) 现在,您的整个响应都为html,这意味着您可以访问节点,元素和操作内容

3)使用document.querySelector选择所需的元素。请注意,它需要使用css选择器参数,另外请注意,您的css选择器正好指向您想要的位置。

4)现在,如果您知道querySelector类型,则可以声明或仅使用var。 (声明它为静态是更好的选择,它将提供访问dom操纵属性和方法)

import 'dart:async';
import 'package:http/http.dart' as http;
import 'package:html/parser.dart';

void getIMDBReview()async{
final response = await http.get(
          'https://m.imdb.com/title/$imdbId/reviews?ref_=m_tt_urv');
      if (response.statusCode == 200) {
        // print(response.body);
        var document = parse(response.body);
        var reviewContent = document.querySelectorAll(
            '#reviews-container > .ipl-content-list__item > .imdb-user-review >.review-container >.content>.text');
        for(var review in reviewContent){
        print(review.text);
        }

      }
 }

用id代替imdbId,希望它会返回所有评论