位置0的意外字符(B)

塔哈·本·穆罕默德(Taha Ben MOHAMED)

我想从以下网址中抓取数据:http ://www.airfrance.fr/FR/fr/local/vols/getInstantFlexNewCalendar.do?idMonth=10&itineraryNumber =1我要提取(Date + Price + Price HT+ Taxe),然后将它们保存到Excel文件中。我使用了以下代码:

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.jsoup.Jsoup;

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.javascript.host.dom.Document;

import jxl.CellView;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.UnderlineStyle;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;


public class MoisAirfrancee {

    public static void main(String[] args)throws FailingHttpStatusCodeException, MalformedURLException, IOException, RowsExceededException, WriteException{

        Map<String, Integer> prices = new TreeMap<String, Integer>(); 
        File f=new File("C:\\Users\\tahab_000\\Desktop\\Test.xls");
        WritableWorkbook myexcel=Workbook.createWorkbook(f);
        WritableSheet mysheet=myexcel.createSheet("mySheet", 0);        

        try {
            org.jsoup.nodes.Document doc = Jsoup.connect("http://www.airfrance.fr/FR/fr/local/vols/getInstantFlexNewCalendar.do?idMonth=10&itineraryNumber=1").get();

            JSONObject obj = (JSONObject) new JSONParser().parse(doc.text());

            obj = (JSONObject) obj.get("days");

            for (Iterator<?> iterator = obj.keySet().iterator(); iterator.hasNext();) {
                String key = (String) iterator.next();
                JSONObject dateObject = (JSONObject) obj.get(key);
                Double price = (Double) dateObject.get("price");
                int roundedPrice = (int) Math.ceil(price); 

                prices.put(key, roundedPrice);          

            }
            int j=1;

            for (String key : prices.keySet()) {

                addLabel(mysheet, 0, 0, "Date" );
                addLabel(mysheet, 1, 0, "Prix" );
                addLabel(mysheet, 1, j, prices.get(key).toString()+"€" );
                addLabel(mysheet, 0, j, key );

                j++;

                System.out.println(key + ": " + prices.get(key) + " €");
            }
        }catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        myexcel.write();

        myexcel.close();

    }
    private static void addLabel(WritableSheet sheet, int column, int row, String s)
              throws WriteException, RowsExceededException {
            Label label;
            label = new Label(column, row, s);
            sheet.addCell(label);
          }
}

运行后,我遇到了这个异常:

Unexpected character (B) at position 0.
    at org.json.simple.parser.Yylex.yylex(Yylex.java:610)
    at org.json.simple.parser.JSONParser.nextToken(JSONParser.java:269)
    at org.json.simple.parser.JSONParser.parse(JSONParser.java:118)
    at org.json.simple.parser.JSONParser.parse(JSONParser.java:81)
    at org.json.simple.parser.JSONParser.parse(JSONParser.java:75)
    at MoisAirfrancee.main(MoisAirfrancee.java:47)
弗雷德里克·克莱恩(Frederic Klein)

首先连接到默认登录页面(http://www.airfrance.fr/vols/paris+tunis)。

从响应中,我们可以获取所需的cookie,response.cookies()并将其设置为与查询页面的连接(http://www.airfrance.fr/FR/fr/local/vols/getInstantFlexNewCalendar.do?idMonth= 10&itineraryNumber = 1)与.cookies(response.cookies())

注意:此处可能不需要设置用户代理和引荐来源网址,但这也没有害处并且可以稳定抓取。

Response response = Jsoup.connect("http://www.airfrance.fr/vols/paris+tunis")
                .userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36")
                .method(Method.GET)
                .timeout(2000)
                .execute();

Document doc = Jsoup
                .connect("http://www.airfrance.fr/FR/fr/local/vols/getInstantFlexNewCalendar.do?idMonth=10&itineraryNumber=1")
                .cookies(response.cookies())
                .userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36")
                .referrer("http://www.airfrance.fr/vols/paris+tunis")
                .timeout(2000)
                .get();

String jsonResponse = doc.text();

System.out.println(jsonResponse);

输出:

{"idMonth":10,"month":"Novembre","bestPrice":270.0,"isLowest":false,"isAvailable":true, ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JSON解析:位置0处的意外字符(ÿ)

来自分类Dev

Android中的Json:位置0处出现意外字符(<)

来自分类Dev

W / System.err:位置0处的意外字符()

来自分类Dev

W / System.err:位置0处的意外字符()

来自分类Dev

解析值时遇到意外字符:c。路径'',第0行,位置0。

来自分类Dev

解析值时遇到意外字符:?。路径 '',第 0 行,位置 0

来自分类Dev

JSON.Parse:JSON中位置0处的意外令牌B

来自分类Dev

如何修复 SyntaxError:JSON 中位置 0 的意外标记 b

来自分类Dev

“ JSON_PARSING_ERROR:位置0处的意外字符(d)。” 从GAS发送GCM请求时

来自分类Dev

Json Parser异常解析值时遇到意外字符:S.路径”,第0行,位置0

来自分类Dev

解析值时遇到意外字符:e。尝试删除documentDB中的文档时,路径”,第0行,位置0

来自分类Dev

DateTime :: __ construct():无法解析位置0(1)上的时间字符串(16/07/2020):意外字符

来自分类Dev

JSON中的意外令牌<位于位置0

来自分类Dev

位置67处的意外字符(j)

来自分类Dev

模块解析失败:意外字符'@'(1:0)

来自分类Dev

C#Xamarin Android Rest调用PCL错误“解析值时遇到意外字符:S. Path”,第0行,位置0。”

来自分类Dev

.NetCore Angular:“解析值时遇到意外字符:c.路径 '',第 0 行,位置 0。” 仅在 Angular PUT 请求期间

来自分类Dev

SyntaxError:JSON中位置0处出现意外令牌'

来自分类Dev

提取返回SyntaxError:位置0的JSON中的意外令牌T

来自分类Dev

SyntaxError:JSON中位置0处出现意外令牌“

来自分类Dev

JSON 中位置 0 处的意外标记

来自分类Dev

Json 响应“JSON 中的意外令牌位于位置 0”

来自分类Dev

Bootgrid - 位置 0 处的 JSON 中的意外令牌 <

来自分类Dev

Angular SyntaxError:JSON 中位置 0 的意外标记 P

来自分类Dev

位置2 JSON解析器(Java)处的意外字符(“)

来自分类Dev

解析值行1,位置1时遇到意外字符

来自分类Dev

位置2 JSON解析器(Java)处的意外字符(“)

来自分类Dev

Python意外的导入位置

来自分类Dev

Android Volley 错误标题值中的意外字符 0x0a

Related 相关文章

  1. 1

    JSON解析:位置0处的意外字符(ÿ)

  2. 2

    Android中的Json:位置0处出现意外字符(<)

  3. 3

    W / System.err:位置0处的意外字符()

  4. 4

    W / System.err:位置0处的意外字符()

  5. 5

    解析值时遇到意外字符:c。路径'',第0行,位置0。

  6. 6

    解析值时遇到意外字符:?。路径 '',第 0 行,位置 0

  7. 7

    JSON.Parse:JSON中位置0处的意外令牌B

  8. 8

    如何修复 SyntaxError:JSON 中位置 0 的意外标记 b

  9. 9

    “ JSON_PARSING_ERROR:位置0处的意外字符(d)。” 从GAS发送GCM请求时

  10. 10

    Json Parser异常解析值时遇到意外字符:S.路径”,第0行,位置0

  11. 11

    解析值时遇到意外字符:e。尝试删除documentDB中的文档时,路径”,第0行,位置0

  12. 12

    DateTime :: __ construct():无法解析位置0(1)上的时间字符串(16/07/2020):意外字符

  13. 13

    JSON中的意外令牌<位于位置0

  14. 14

    位置67处的意外字符(j)

  15. 15

    模块解析失败:意外字符'@'(1:0)

  16. 16

    C#Xamarin Android Rest调用PCL错误“解析值时遇到意外字符:S. Path”,第0行,位置0。”

  17. 17

    .NetCore Angular:“解析值时遇到意外字符:c.路径 '',第 0 行,位置 0。” 仅在 Angular PUT 请求期间

  18. 18

    SyntaxError:JSON中位置0处出现意外令牌'

  19. 19

    提取返回SyntaxError:位置0的JSON中的意外令牌T

  20. 20

    SyntaxError:JSON中位置0处出现意外令牌“

  21. 21

    JSON 中位置 0 处的意外标记

  22. 22

    Json 响应“JSON 中的意外令牌位于位置 0”

  23. 23

    Bootgrid - 位置 0 处的 JSON 中的意外令牌 <

  24. 24

    Angular SyntaxError:JSON 中位置 0 的意外标记 P

  25. 25

    位置2 JSON解析器(Java)处的意外字符(“)

  26. 26

    解析值行1,位置1时遇到意外字符

  27. 27

    位置2 JSON解析器(Java)处的意外字符(“)

  28. 28

    Python意外的导入位置

  29. 29

    Android Volley 错误标题值中的意外字符 0x0a

热门标签

归档