【问题标题】:Web scraping giving different responses网络抓取给出不同的响应
【发布时间】:2021-07-03 10:16:44
【问题描述】:

我有这个 dart 代码,但每次运行它都会给出不同的输出

重现步骤 将两个文件添加到同一目录 运行

飞镖酒吧获得

飞镖代码.dart

它将创建十个具有不同内容的文件

创建一个名为 code.dart 的文件

import "dart:io";
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:html/parser.dart';


Future<String> scrapLyrics(String lyricsUrl) async {
  final response = await http.get(Uri.parse(lyricsUrl));
  var document = parse(response.body);

  return document.getElementsByClassName('lyrics')[0].text;
}

main() async {
    String ly;
  
  for (int i = 1; i <=10; i++) {
    print("Request number $i");
  try{
     ly= await scrapLyrics("https://www.genius.com/The-chainsmokers-closer-lyrics");
  }
  catch(e){
    ly=e.toString();
  }
    File file = File("file$i.txt");
    await file.writeAsString("$ly");
  
    ly="";
  }
}

创建文件 pubspec.yaml

name: my_app
environment:
  sdk: '>=2.10.0 <3.0.0'
dependencies:
  http: ^0.13.3
  html: ^0.15.0

获得的输出(在某些情况下): RangeError(索引):无效值:有效值范围为空:0

【问题讨论】:

    标签: html http dart web-scraping


    【解决方案1】:

    您要查找的类名是 "Lyrics__Container-sc-1ynbvzw-8" 而不是 "lyrics"

    【讨论】:

    • @Edie_Kamau 其实在移动端是不一样的
    • ``` 返回 document.getElementsByClassName('lyrics')[0].text; ``` 返回一个空列表,因此在访问第一个元素时抛出 `` RangeError ```。如果你是肯定的类名是```“歌词”```我不确定为什么会抛出 Range 错误。
    • @Edie_Kamau 该网站在不同的运行中提供了不同的 html 代码
    • @Edie_Kamau 如果可能的话,我可以在其他平台上联系你吗?
    • @SHUVAMJASWAL 电报可能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2021-10-28
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多