4hy^rl={%fpX}Cv$r?cb!^4*9l)neLA9%f6M%M_^E{<
z_@8&~T+lwrTcc4h{ipRBXXoU
zB6>b(M{bWU-g{}AdT?*Ks~YoB&gx~k3lS(I&3fsTNOLzNbNg|xL~%_VBsOc}AQ9K2
z!@(JsaMg%2G}+s3#!)+s8QoFm3GBIXor$}|y;yDH{RrZ&o;?+zdh_Y#CXDEV@dfvj
zxxTO1FF%t&U`$gEwIfqIE0&R(#VIpxtQ-O6lBRJ;
ztKRf@q1lV?n5W0QGGZWksFEMcDAtY;nU~9)WoA-ZG&@n0EM&&h%!Oi}9y1KNI!mm$
zQY#sgjND3C=VLwR4m5k0jB2ZOQo%9JYosN2kb8}!iK|S^?Ff0wO}%U}_p^+nfcgO(
z3Eko}+NqD~CDvyR(wRapv*?G}ok@Jh+_93TJBAh70OW-KNa(>H2=AFWm&e@F8A*F*
GxBnL=0Bg?x
literal 0
HcmV?d00001
diff --git a/project/crawler.properties b/project/crawler.properties
new file mode 100644
index 0000000..00eb9d5
--- /dev/null
+++ b/project/crawler.properties
@@ -0,0 +1,22 @@
+# 爬虫配置文件
+
+# 请求延迟(毫秒)- 避免请求过快被封
+delay.ms=1500
+
+# 请求超时时间(毫秒)
+timeout.ms=15000
+
+# User-Agent
+user.agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
+
+# 数据库路径
+db.path=crawler.db
+
+# 输出目录
+output.dir=output
+
+# 是否启用数据库存储
+enable.database=true
+
+# 是否启用文件输出
+enable.file=true
diff --git a/project/data/books_to_scrape.json b/project/data/books_to_scrape.json
new file mode 100644
index 0000000..e56accc
--- /dev/null
+++ b/project/data/books_to_scrape.json
@@ -0,0 +1,162 @@
+[
+ {
+ "title": "A Light in the Attic",
+ "price": "£51.77",
+ "rating": "3",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
+ },
+ {
+ "title": "Tipping the Velvet",
+ "price": "£53.74",
+ "rating": "1",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/26/0c/260c6ae16bce31c8f8c95daddd9f4a1c.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html"
+ },
+ {
+ "title": "Soumission",
+ "price": "£50.10",
+ "rating": "1",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/3e/ef/3eef99c9d9adef34639f510662022830.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/soumission_998/index.html"
+ },
+ {
+ "title": "Sharp Objects",
+ "price": "£47.82",
+ "rating": "4",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/32/51/3251cf3a3412f53f339e42cac2134093.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/sharp-objects_997/index.html"
+ },
+ {
+ "title": "Sapiens: A Brief History of Humankind",
+ "price": "£54.23",
+ "rating": "5",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/be/a5/bea5697f2534a2f86a3ef27b5a8c12a6.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/sapiens-a-brief-history-of-humankind_996/index.html"
+ },
+ {
+ "title": "The Requiem Red",
+ "price": "£22.65",
+ "rating": "1",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/68/33/68339b4c9bc034267e1da611ab3b34f8.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/the-requiem-red_995/index.html"
+ },
+ {
+ "title": "The Dirty Little Secrets of Getting Your Dream Job",
+ "price": "£33.34",
+ "rating": "4",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/92/27/92274a95b7c251fea59a2b8a78275ab4.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/the-dirty-little-secrets-of-getting-your-dream-job_994/index.html"
+ },
+ {
+ "title": "The Coming Woman: A Novel Based on the Life of the Infamous Feminist, Victoria Woodhull",
+ "price": "£17.93",
+ "rating": "3",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/3d/54/3d54940e57e662c4dd1f3ff00c78cc64.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/the-coming-woman-a-novel-based-on-the-life-of-the-infamous-feminist-victoria-woodhull_993/index.html"
+ },
+ {
+ "title": "The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics",
+ "price": "£22.60",
+ "rating": "4",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/66/88/66883b91f6804b2323c8369331cb7dd1.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/the-boys-in-the-boat-nine-americans-and-their-epic-quest-for-gold-at-the-1936-berlin-olympics_992/index.html"
+ },
+ {
+ "title": "The Black Maria",
+ "price": "£52.15",
+ "rating": "1",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/58/46/5846057e28022268153beff6d352b06c.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/the-black-maria_991/index.html"
+ },
+ {
+ "title": "Starving Hearts (Triangular Trade Trilogy, #1)",
+ "price": "£13.99",
+ "rating": "2",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/be/f4/bef44da28c98f905a3ebec0b87be8530.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/starving-hearts-triangular-trade-trilogy-1_990/index.html"
+ },
+ {
+ "title": "Shakespeare\u0027s Sonnets",
+ "price": "£20.66",
+ "rating": "4",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/10/48/1048f63d3b5061cd2f424d20b3f9b666.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/shakespeares-sonnets_989/index.html"
+ },
+ {
+ "title": "Set Me Free",
+ "price": "£17.46",
+ "rating": "5",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/5b/88/5b88c52633f53cacf162c15f4f823153.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/set-me-free_988/index.html"
+ },
+ {
+ "title": "Scott Pilgrim\u0027s Precious Little Life (Scott Pilgrim #1)",
+ "price": "£52.29",
+ "rating": "5",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/94/b1/94b1b8b244bce9677c2f29ccc890d4d2.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/scott-pilgrims-precious-little-life-scott-pilgrim-1_987/index.html"
+ },
+ {
+ "title": "Rip it Up and Start Again",
+ "price": "£35.02",
+ "rating": "5",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/81/c4/81c4a973364e17d01f217e1188253d5e.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/rip-it-up-and-start-again_986/index.html"
+ },
+ {
+ "title": "Our Band Could Be Your Life: Scenes from the American Indie Underground, 1981-1991",
+ "price": "£57.25",
+ "rating": "3",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/54/60/54607fe8945897cdcced0044103b10b6.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/our-band-could-be-your-life-scenes-from-the-american-indie-underground-1981-1991_985/index.html"
+ },
+ {
+ "title": "Olio",
+ "price": "£23.88",
+ "rating": "1",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/55/33/553310a7162dfbc2c6d19a84da0df9e1.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/olio_984/index.html"
+ },
+ {
+ "title": "Mesaerion: The Best Science Fiction Stories 1800-1849",
+ "price": "£37.59",
+ "rating": "1",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/09/a3/09a3aef48557576e1a85ba7efea8ecb7.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/mesaerion-the-best-science-fiction-stories-1800-1849_983/index.html"
+ },
+ {
+ "title": "Libertarianism for Beginners",
+ "price": "£51.33",
+ "rating": "2",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/0b/bc/0bbcd0a6f4bcd81ccb1049a52736406e.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/libertarianism-for-beginners_982/index.html"
+ },
+ {
+ "title": "It\u0027s Only the Himalayas",
+ "price": "£45.17",
+ "rating": "2",
+ "availability": "In stock",
+ "imageUrl": "http://books.toscrape.com/media/cache/27/a5/27a53d0bb95bdd88288eaf66c9230d7e.jpg",
+ "productUrl": "http://books.toscrape.com/catalogue/its-only-the-himalayas_981/index.html"
+ }
+]
\ No newline at end of file
diff --git a/project/data/douban_books.json b/project/data/douban_books.json
new file mode 100644
index 0000000..cc2cf77
--- /dev/null
+++ b/project/data/douban_books.json
@@ -0,0 +1,82 @@
+[
+ {
+ "title": "安定此心:我当精神科医生的12000天",
+ "url": "https://book.douban.com/subject/37502923/"
+ },
+ {
+ "title": "挽救计划",
+ "url": "https://book.douban.com/subject/38210508/"
+ },
+ {
+ "title": "咸的玩笑",
+ "url": "https://book.douban.com/subject/37833272/"
+ },
+ {
+ "title": "真事隐:康熙废储与正史虚构",
+ "url": "https://book.douban.com/subject/37920184/"
+ },
+ {
+ "title": "大厂小民:我在互联网公司的1480天",
+ "url": "https://book.douban.com/subject/38208793/"
+ },
+ {
+ "title": "天色已晚",
+ "url": "https://book.douban.com/subject/37890167/"
+ },
+ {
+ "title": "她和她的决心",
+ "url": "https://book.douban.com/subject/38178826/"
+ },
+ {
+ "title": "凯罗斯",
+ "url": "https://book.douban.com/subject/37825000/"
+ },
+ {
+ "title": "幸福蒙太奇",
+ "url": "https://book.douban.com/subject/37841159/"
+ },
+ {
+ "title": "螃蟹的邀请",
+ "url": "https://book.douban.com/subject/37496217/"
+ },
+ {
+ "title": "抄写员巴托比",
+ "url": "https://book.douban.com/subject/38392174/"
+ },
+ {
+ "title": "我收养了一个朋友",
+ "url": "https://book.douban.com/subject/37938861/"
+ },
+ {
+ "title": "哈萨比斯:谷歌AI之脑",
+ "url": "https://book.douban.com/subject/38357884/"
+ },
+ {
+ "title": "像女孩那样丢球",
+ "url": "https://book.douban.com/subject/37126780/"
+ },
+ {
+ "title": "刚刚离开的世界",
+ "url": "https://book.douban.com/subject/37447242/"
+ },
+ {
+ "title": "故纸浮生.1-2",
+ "url": "https://book.douban.com/subject/37648813/"
+ },
+ {
+ "title": "在世与认知",
+ "url": "https://book.douban.com/subject/37112076/"
+ },
+ {
+ "title": "呼啸山庄",
+ "url": "https://book.douban.com/subject/30471282/"
+ },
+ {
+ "title": "我们如何理解这个世界:与齐格蒙特·鲍曼对谈",
+ "url": "https://book.douban.com/subject/37930972/"
+ },
+ {
+ "title": "刮风下雨",
+ "url": "https://book.douban.com/subject/38240709/"
+ }
+]
\ No newline at end of file
diff --git a/project/data/douban_movies.json b/project/data/douban_movies.json
new file mode 100644
index 0000000..c65c411
--- /dev/null
+++ b/project/data/douban_movies.json
@@ -0,0 +1,62 @@
+[
+ {
+ "title": "爱情抓马",
+ "rating": "6.9",
+ "ratingCount": "(34363人评价)",
+ "url": "https://movie.douban.com/subject/36995126/"
+ },
+ {
+ "title": "世界的主人",
+ "rating": "9.1",
+ "ratingCount": "(116736人评价)",
+ "url": "https://movie.douban.com/subject/37116612/"
+ },
+ {
+ "title": "木乃伊",
+ "rating": "6.2",
+ "ratingCount": "(13705人评价)",
+ "url": "https://movie.douban.com/subject/36929221/"
+ },
+ {
+ "title": "蜂蜜的针",
+ "rating": "6.7",
+ "ratingCount": "(48214人评价)",
+ "url": "https://movie.douban.com/subject/26022233/"
+ },
+ {
+ "title": "杀的就是你",
+ "rating": "6.9",
+ "ratingCount": "(21794人评价)",
+ "url": "https://movie.douban.com/subject/36926954/"
+ },
+ {
+ "title": "惩罚者:最后一击",
+ "rating": "6.8",
+ "ratingCount": "(5478人评价)",
+ "url": "https://movie.douban.com/subject/37259325/"
+ },
+ {
+ "title": "蒙特利尔,我的美人",
+ "rating": "7.6",
+ "ratingCount": "(14162人评价)",
+ "url": "https://movie.douban.com/subject/37019075/"
+ },
+ {
+ "title": "与王生活的男人",
+ "rating": "7.4",
+ "ratingCount": "(10007人评价)",
+ "url": "https://movie.douban.com/subject/36978169/"
+ },
+ {
+ "title": "挽救计划",
+ "rating": "8.6",
+ "ratingCount": "(463129人评价)",
+ "url": "https://movie.douban.com/subject/35010610/"
+ },
+ {
+ "title": "长夜将尽",
+ "rating": "6.5",
+ "ratingCount": "(10878人评价)",
+ "url": "https://movie.douban.com/subject/35590993/"
+ }
+]
\ No newline at end of file
diff --git a/project/douban_top250.txt b/project/douban_top250.txt
new file mode 100644
index 0000000..bf642c7
--- /dev/null
+++ b/project/douban_top250.txt
@@ -0,0 +1,250 @@
+排名:1 电影:肖申克的救赎 评分:9.7
+排名:2 电影:霸王别姬 评分:9.6
+排名:3 电影:泰坦尼克号 评分:9.5
+排名:4 电影:阿甘正传 评分:9.5
+排名:5 电影:千与千寻 评分:9.4
+排名:6 电影:美丽人生 评分:9.5
+排名:7 电影:星际穿越 评分:9.4
+排名:8 电影:这个杀手不太冷 评分:9.4
+排名:9 电影:盗梦空间 评分:9.4
+排名:10 电影:楚门的世界 评分:9.4
+排名:11 电影:辛德勒的名单 评分:9.5
+排名:12 电影:忠犬八公的故事 评分:9.4
+排名:13 电影:海上钢琴师 评分:9.3
+排名:14 电影:疯狂动物城 评分:9.3
+排名:15 电影:三傻大闹宝莱坞 评分:9.2
+排名:16 电影:机器人总动员 评分:9.3
+排名:17 电影:放牛班的春天 评分:9.3
+排名:18 电影:无间道 评分:9.3
+排名:19 电影:控方证人 评分:9.6
+排名:20 电影:寻梦环游记 评分:9.1
+排名:21 电影:大话西游之大圣娶亲 评分:9.2
+排名:22 电影:熔炉 评分:9.3
+排名:23 电影:触不可及 评分:9.3
+排名:24 电影:教父 评分:9.3
+排名:25 电影:末代皇帝 评分:9.3
+排名:26 电影:哈利·波特与魔法石 评分:9.2
+排名:27 电影:当幸福来敲门 评分:9.1
+排名:28 电影:龙猫 评分:9.2
+排名:29 电影:活着 评分:9.3
+排名:30 电影:怦然心动 评分:9.1
+排名:31 电影:蝙蝠侠:黑暗骑士 评分:9.2
+排名:32 电影:指环王3:王者无敌 评分:9.3
+排名:33 电影:我不是药神 评分:9.0
+排名:34 电影:乱世佳人 评分:9.3
+排名:35 电影:飞屋环游记 评分:9.1
+排名:36 电影:让子弹飞 评分:9.0
+排名:37 电影:哈尔的移动城堡 评分:9.1
+排名:38 电影:十二怒汉 评分:9.4
+排名:39 电影:海蒂和爷爷 评分:9.3
+排名:40 电影:素媛 评分:9.3
+排名:41 电影:猫鼠游戏 评分:9.1
+排名:42 电影:天空之城 评分:9.2
+排名:43 电影:鬼子来了 评分:9.3
+排名:44 电影:摔跤吧!爸爸 评分:9.0
+排名:45 电影:少年派的奇幻漂流 评分:9.1
+排名:46 电影:钢琴家 评分:9.3
+排名:47 电影:指环王2:双塔奇兵 评分:9.2
+排名:48 电影:死亡诗社 评分:9.2
+排名:49 电影:大话西游之月光宝盒 评分:9.0
+排名:50 电影:绿皮书 评分:8.9
+排名:51 电影:何以为家 评分:9.1
+排名:52 电影:闻香识女人 评分:9.1
+排名:53 电影:大闹天宫 评分:9.4
+排名:54 电影:黑客帝国 评分:9.1
+排名:55 电影:指环王1:护戒使者 评分:9.1
+排名:56 电影:罗马假日 评分:9.1
+排名:57 电影:教父2 评分:9.3
+排名:58 电影:狮子王 评分:9.1
+排名:59 电影:天堂电影院 评分:9.2
+排名:60 电影:饮食男女 评分:9.2
+排名:61 电影:辩护人 评分:9.2
+排名:62 电影:本杰明·巴顿奇事 评分:9.0
+排名:63 电影:搏击俱乐部 评分:9.0
+排名:64 电影:美丽心灵 评分:9.1
+排名:65 电影:穿条纹睡衣的男孩 评分:9.2
+排名:66 电影:哈利·波特与死亡圣器(下) 评分:9.0
+排名:67 电影:情书 评分:8.9
+排名:68 电影:两杆大烟枪 评分:9.1
+排名:69 电影:窃听风暴 评分:9.2
+排名:70 电影:音乐之声 评分:9.1
+排名:71 电影:功夫 评分:8.9
+排名:72 电影:哈利·波特与阿兹卡班的囚徒 评分:9.0
+排名:73 电影:阿凡达 评分:8.8
+排名:74 电影:西西里的美丽传说 评分:8.9
+排名:75 电影:看不见的客人 评分:8.8
+排名:76 电影:拯救大兵瑞恩 评分:9.1
+排名:77 电影:沉默的羔羊 评分:8.9
+排名:78 电影:小鞋子 评分:9.2
+排名:79 电影:布达佩斯大饭店 评分:8.9
+排名:80 电影:蝴蝶效应 评分:8.9
+排名:81 电影:飞越疯人院 评分:9.1
+排名:82 电影:还有明天 评分:9.3
+排名:83 电影:禁闭岛 评分:8.9
+排名:84 电影:心灵捕手 评分:9.0
+排名:85 电影:致命魔术 评分:8.9
+排名:86 电影:低俗小说 评分:8.9
+排名:87 电影:哈利·波特与密室 评分:8.9
+排名:88 电影:超脱 评分:9.0
+排名:89 电影:一一 评分:9.1
+排名:90 电影:喜剧之王 评分:8.8
+排名:91 电影:杀人回忆 评分:8.9
+排名:92 电影:致命ID 评分:8.9
+排名:93 电影:摩登时代 评分:9.3
+排名:94 电影:春光乍泄 评分:9.0
+排名:95 电影:加勒比海盗 评分:8.8
+排名:96 电影:海豚湾 评分:9.3
+排名:97 电影:美国往事 评分:9.1
+排名:98 电影:红辣椒 评分:9.0
+排名:99 电影:七宗罪 评分:8.8
+排名:100 电影:唐伯虎点秋香 评分:8.8
+排名:101 电影:狩猎 评分:9.1
+排名:102 电影:幽灵公主 评分:8.9
+排名:103 电影:甜蜜蜜 评分:8.9
+排名:104 电影:寄生虫 评分:8.8
+排名:105 电影:天书奇谭 评分:9.2
+排名:106 电影:蝙蝠侠:黑暗骑士崛起 评分:8.9
+排名:107 电影:超能陆战队 评分:8.8
+排名:108 电影:7号房的礼物 评分:8.9
+排名:109 电影:茶馆 评分:9.5
+排名:110 电影:第六感 评分:8.9
+排名:111 电影:爱在黎明破晓前 评分:8.8
+排名:112 电影:爱在日落黄昏时 评分:8.9
+排名:113 电影:被嫌弃的松子的一生 评分:8.8
+排名:114 电影:头脑特工队 评分:8.8
+排名:115 电影:哈利·波特与火焰杯 评分:8.8
+排名:116 电影:未麻的部屋 评分:9.1
+排名:117 电影:重庆森林 评分:8.8
+排名:118 电影:借东西的小人阿莉埃蒂 评分:8.9
+排名:119 电影:菊次郎的夏天 评分:8.9
+排名:120 电影:入殓师 评分:8.9
+排名:121 电影:断背山 评分:8.8
+排名:122 电影:剪刀手爱德华 评分:8.7
+排名:123 电影:勇敢的心 评分:8.9
+排名:124 电影:时空恋旅人 评分:8.8
+排名:125 电影:驯龙高手 评分:8.8
+排名:126 电影:消失的爱人 评分:8.7
+排名:127 电影:无人知晓 评分:9.1
+排名:128 电影:傲慢与偏见 评分:8.7
+排名:129 电影:倩女幽魂 评分:8.8
+排名:130 电影:新世界 评分:8.9
+排名:131 电影:花样年华 评分:8.8
+排名:132 电影:玩具总动员3 评分:8.9
+排名:133 电影:一个叫欧维的男人决定去死 评分:8.9
+排名:134 电影:色,戒 评分:8.7
+排名:135 电影:完美的世界 评分:9.1
+排名:136 电影:阳光灿烂的日子 评分:8.8
+排名:137 电影:怪兽电力公司 评分:8.8
+排名:138 电影:教父3 评分:9.0
+排名:139 电影:小森林 夏秋篇 评分:9.0
+排名:140 电影:天使爱美丽 评分:8.7
+排名:141 电影:侧耳倾听 评分:8.9
+排名:142 电影:哪吒闹海 评分:9.2
+排名:143 电影:九品芝麻官 评分:8.8
+排名:144 电影:被解救的姜戈 评分:8.8
+排名:145 电影:请以你的名字呼唤我 评分:8.8
+排名:146 电影:幸福终点站 评分:8.8
+排名:147 电影:釜山行 评分:8.6
+排名:148 电影:神偷奶爸 评分:8.7
+排名:149 电影:小森林 冬春篇 评分:9.0
+排名:150 电影:喜宴 评分:9.0
+排名:151 电影:萤火之森 评分:8.8
+排名:152 电影:告白 评分:8.8
+排名:153 电影:玛丽和麦克斯 评分:9.0
+排名:154 电影:七武士 评分:9.3
+排名:155 电影:头号玩家 评分:8.6
+排名:156 电影:模仿游戏 评分:8.8
+排名:157 电影:惊魂记 评分:9.0
+排名:158 电影:大鱼 评分:8.8
+排名:159 电影:机器人之梦 评分:9.1
+排名:160 电影:心灵奇旅 评分:8.7
+排名:161 电影:背靠背,脸对脸 评分:9.5
+排名:162 电影:射雕英雄传之东成西就 评分:8.7
+排名:163 电影:血战钢锯岭 评分:8.7
+排名:164 电影:你的名字。 评分:8.5
+排名:165 电影:我是山姆 评分:9.0
+排名:166 电影:阳光姐妹淘 评分:8.8
+排名:167 电影:恐怖直播 评分:8.7
+排名:168 电影:黑客帝国3:矩阵革命 评分:8.8
+排名:169 电影:末路狂花 评分:9.0
+排名:170 电影:高山下的花环 评分:9.5
+排名:171 电影:小丑 评分:8.7
+排名:172 电影:谍影重重3 评分:8.9
+排名:173 电影:三块广告牌 评分:8.7
+排名:174 电影:电锯惊魂 评分:8.7
+排名:175 电影:无间道2 评分:8.8
+排名:176 电影:达拉斯买家俱乐部 评分:8.8
+排名:177 电影:疯狂原始人 评分:8.7
+排名:178 电影:绿里奇迹 评分:8.9
+排名:179 电影:爱在午夜降临前 评分:8.9
+排名:180 电影:疯狂的石头 评分:8.6
+排名:181 电影:雨中曲 评分:9.1
+排名:182 电影:2001太空漫游 评分:8.9
+排名:183 电影:海街日记 评分:8.8
+排名:184 电影:风之谷 评分:8.9
+排名:185 电影:上帝之城 评分:9.0
+排名:186 电影:心迷宫 评分:8.7
+排名:187 电影:英雄本色 评分:8.6
+排名:188 电影:记忆碎片 评分:8.7
+排名:189 电影:纵横四海 评分:8.8
+排名:190 电影:无敌破坏王 评分:8.7
+排名:191 电影:卢旺达饭店 评分:8.9
+排名:192 电影:牯岭街少年杀人事件 评分:8.9
+排名:193 电影:恐怖游轮 评分:8.5
+排名:194 电影:东京教父 评分:9.0
+排名:195 电影:小偷家族 评分:8.7
+排名:196 电影:魔女宅急便 评分:8.7
+排名:197 电影:冰川时代 评分:8.7
+排名:198 电影:芙蓉镇 评分:9.3
+排名:199 电影:忠犬八公物语 评分:9.2
+排名:200 电影:岁月神偷 评分:8.7
+排名:201 电影:遗愿清单 评分:8.7
+排名:202 电影:荒蛮故事 评分:8.7
+排名:203 电影:大佛普拉斯 评分:8.7
+排名:204 电影:源代码 评分:8.6
+排名:205 电影:花束般的恋爱 评分:8.6
+排名:206 电影:白日梦想家 评分:8.6
+排名:207 电影:爱乐之城 评分:8.4
+排名:208 电影:疯狂的麦克斯4:狂暴之路 评分:8.7
+排名:209 电影:可可西里 评分:8.9
+排名:210 电影:你看起来好像很好吃 评分:8.9
+排名:211 电影:贫民窟的百万富翁 评分:8.6
+排名:212 电影:波西米亚狂想曲 评分:8.6
+排名:213 电影:城市之光 评分:9.3
+排名:214 电影:爆裂鼓手 评分:8.6
+排名:215 电影:青蛇 评分:8.6
+排名:216 电影:哈利·波特与死亡圣器(上) 评分:8.6
+排名:217 电影:无耻混蛋 评分:8.7
+排名:218 电影:东邪西毒 评分:8.6
+排名:219 电影:终结者2:审判日 评分:8.8
+排名:220 电影:大红灯笼高高挂 评分:8.8
+排名:221 电影:黑天鹅 评分:8.6
+排名:222 电影:新龙门客栈 评分:8.7
+排名:223 电影:初恋这件小事 评分:8.5
+排名:224 电影:千钧一发 评分:8.8
+排名:225 电影:人工智能 评分:8.7
+排名:226 电影:崖上的波妞 评分:8.6
+排名:227 电影:雨人 评分:8.7
+排名:228 电影:虎口脱险 评分:8.9
+排名:229 电影:哈利·波特与凤凰社 评分:8.6
+排名:230 电影:彗星来的那一夜 评分:8.6
+排名:231 电影:罗生门 评分:8.8
+排名:232 电影:海边的曼彻斯特 评分:8.6
+排名:233 电影:恋恋笔记本 评分:8.5
+排名:234 电影:火星救援 评分:8.5
+排名:235 电影:真爱至上 评分:8.5
+排名:236 电影:黑客帝国2:重装上阵 评分:8.7
+排名:237 电影:冰雪奇缘 评分:8.5
+排名:238 电影:步履不停 评分:8.8
+排名:239 电影:奇迹男孩 评分:8.6
+排名:240 电影:千年女优 评分:8.8
+排名:241 电影:谍影重重2 评分:8.7
+排名:242 电影:战争之王 评分:8.7
+排名:243 电影:蜘蛛侠:平行宇宙 评分:8.6
+排名:244 电影:攻壳机动队 评分:9.0
+排名:245 电影:血钻 评分:8.7
+排名:246 电影:小姐 评分:8.5
+排名:247 电影:隐藏人物 评分:8.9
+排名:248 电影:血观音 评分:8.6
+排名:249 电影:魂断蓝桥 评分:8.8
+排名:250 电影:房间 评分:8.7
diff --git a/project/output/BooksToScrape_20260531_233112.json b/project/output/BooksToScrape_20260531_233112.json
new file mode 100644
index 0000000..02e7729
--- /dev/null
+++ b/project/output/BooksToScrape_20260531_233112.json
@@ -0,0 +1,9002 @@
+[
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "A Light in the Attic",
+ "price": 51.77,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Tipping the Velvet",
+ "price": 53.74,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/26/0c/260c6ae16bce31c8f8c95daddd9f4a1c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Soumission",
+ "price": 50.1,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/catalogue/soumission_998/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3e/ef/3eef99c9d9adef34639f510662022830.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Sharp Objects",
+ "price": 47.82,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/catalogue/sharp-objects_997/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/32/51/3251cf3a3412f53f339e42cac2134093.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Sapiens: A Brief History of Humankind",
+ "price": 54.23,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/catalogue/sapiens-a-brief-history-of-humankind_996/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/be/a5/bea5697f2534a2f86a3ef27b5a8c12a6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Requiem Red",
+ "price": 22.65,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/catalogue/the-requiem-red_995/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/68/33/68339b4c9bc034267e1da611ab3b34f8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Dirty Little Secrets of Getting Your Dream Job",
+ "price": 33.34,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/catalogue/the-dirty-little-secrets-of-getting-your-dream-job_994/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/92/27/92274a95b7c251fea59a2b8a78275ab4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Coming Woman: A Novel Based on the Life of the Infamous Feminist, Victoria Woodhull",
+ "price": 17.93,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/catalogue/the-coming-woman-a-novel-based-on-the-life-of-the-infamous-feminist-victoria-woodhull_993/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3d/54/3d54940e57e662c4dd1f3ff00c78cc64.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics",
+ "price": 22.6,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/catalogue/the-boys-in-the-boat-nine-americans-and-their-epic-quest-for-gold-at-the-1936-berlin-olympics_992/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/66/88/66883b91f6804b2323c8369331cb7dd1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Black Maria",
+ "price": 52.15,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/catalogue/the-black-maria_991/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/58/46/5846057e28022268153beff6d352b06c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Starving Hearts (Triangular Trade Trilogy, #1)",
+ "price": 13.99,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/catalogue/starving-hearts-triangular-trade-trilogy-1_990/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/be/f4/bef44da28c98f905a3ebec0b87be8530.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Shakespeare\u0027s Sonnets",
+ "price": 20.66,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/catalogue/shakespeares-sonnets_989/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/10/48/1048f63d3b5061cd2f424d20b3f9b666.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Set Me Free",
+ "price": 17.46,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/catalogue/set-me-free_988/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5b/88/5b88c52633f53cacf162c15f4f823153.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Scott Pilgrim\u0027s Precious Little Life (Scott Pilgrim #1)",
+ "price": 52.29,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/catalogue/scott-pilgrims-precious-little-life-scott-pilgrim-1_987/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/94/b1/94b1b8b244bce9677c2f29ccc890d4d2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Rip it Up and Start Again",
+ "price": 35.02,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/catalogue/rip-it-up-and-start-again_986/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/81/c4/81c4a973364e17d01f217e1188253d5e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Our Band Could Be Your Life: Scenes from the American Indie Underground, 1981-1991",
+ "price": 57.25,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/catalogue/our-band-could-be-your-life-scenes-from-the-american-indie-underground-1981-1991_985/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/54/60/54607fe8945897cdcced0044103b10b6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Olio",
+ "price": 23.88,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/catalogue/olio_984/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/55/33/553310a7162dfbc2c6d19a84da0df9e1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Mesaerion: The Best Science Fiction Stories 1800-1849",
+ "price": 37.59,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/catalogue/mesaerion-the-best-science-fiction-stories-1800-1849_983/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/09/a3/09a3aef48557576e1a85ba7efea8ecb7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Libertarianism for Beginners",
+ "price": 51.33,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/catalogue/libertarianism-for-beginners_982/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0b/bc/0bbcd0a6f4bcd81ccb1049a52736406e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "It\u0027s Only the Himalayas",
+ "price": 45.17,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/catalogue/its-only-the-himalayas_981/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/27/a5/27a53d0bb95bdd88288eaf66c9230d7e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "In Her Wake",
+ "price": 12.84,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/in-her-wake_980/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5d/72/5d72709c6a7a9584a4d1cf07648bfce1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "How Music Works",
+ "price": 37.32,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/how-music-works_979/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5c/c8/5cc8e107246cb478960d4f0aba1e1c8e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Foolproof Preserving: A Guide to Small Batch Jams, Jellies, Pickles, Condiments, and More: A Foolproof Guide to Making Small Batch Jams, Jellies, Pickles, Condiments, and More",
+ "price": 30.52,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/foolproof-preserving-a-guide-to-small-batch-jams-jellies-pickles-condiments-and-more-a-foolproof-guide-to-making-small-batch-jams-jellies-pickles-condiments-and-more_978/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9f/59/9f59f01fa916a7bb8f0b28a4012179a4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Chase Me (Paris Nights #2)",
+ "price": 25.27,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/chase-me-paris-nights-2_977/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9c/2e/9c2e0eb8866b8e3f3b768994fd3d1c1a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Black Dust",
+ "price": 34.53,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/black-dust_976/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/44/cc/44ccc99c8f82c33d4f9d2afa4ef25787.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Birdsong: A Story in Pictures",
+ "price": 54.64,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/birdsong-a-story-in-pictures_975/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/af/6e/af6e796160fe63e0cf19d44395c7ddf2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "America\u0027s Cradle of Quarterbacks: Western Pennsylvania\u0027s Football Factory from Johnny Unitas to Joe Montana",
+ "price": 22.5,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/americas-cradle-of-quarterbacks-western-pennsylvanias-football-factory-from-johnny-unitas-to-joe-montana_974/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ef/0b/ef0bed08de4e083dba5e20fdb98d9c36.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Aladdin and His Wonderful Lamp",
+ "price": 53.13,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/aladdin-and-his-wonderful-lamp_973/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d6/da/d6da0371958068bbaf39ea9c174275cd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Worlds Elsewhere: Journeys Around Shakespeare’s Globe",
+ "price": 40.3,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/worlds-elsewhere-journeys-around-shakespeares-globe_972/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2e/98/2e98c332bf8563b584784971541c4445.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Wall and Piece",
+ "price": 44.18,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/wall-and-piece_971/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a5/41/a5416b9646aaa7287baa287ec2590270.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Four Agreements: A Practical Guide to Personal Freedom",
+ "price": 17.66,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-four-agreements-a-practical-guide-to-personal-freedom_970/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0f/7e/0f7ee69495c0df1d35723f012624a9f8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Five Love Languages: How to Express Heartfelt Commitment to Your Mate",
+ "price": 31.05,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-five-love-languages-how-to-express-heartfelt-commitment-to-your-mate_969/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/38/c5/38c56fba316c07305643a8065269594e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Elephant Tree",
+ "price": 23.82,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-elephant-tree_968/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5d/7e/5d7ecde8e81513eba8a64c9fe000744b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Bear and the Piano",
+ "price": 36.89,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-bear-and-the-piano_967/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cf/bb/cfbb5e62715c6d888fd07794c9bab5d6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Sophie\u0027s World",
+ "price": 15.94,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/sophies-world_966/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/65/71/6571919836ec51ed54f0050c31d8a0cd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Penny Maybe",
+ "price": 33.29,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/penny-maybe_965/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/12/53/1253c21c5ef3c6d075c5fa3f5fecee6a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Maude (1883-1993):She Grew Up with the country",
+ "price": 18.02,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/maude-1883-1993she-grew-up-with-the-country_964/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f5/88/f5889d038f5d8e949b494d147c2dcf54.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "In a Dark, Dark Wood",
+ "price": 19.63,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/in-a-dark-dark-wood_963/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/23/85/238570a1c284e730dbc737a7e631ae2b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Behind Closed Doors",
+ "price": 52.22,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/behind-closed-doors_962/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e1/5c/e15c289ba58cea38519e1281e859f0c1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "You can\u0027t bury them all: Poems",
+ "price": 33.63,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/you-cant-bury-them-all-poems_961/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e9/20/e9203b733126c4a0832a1c7885dc27cf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Slow States of Collapse: Poems",
+ "price": 57.31,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/slow-states-of-collapse-poems_960/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/72/41/72417db983862010ef0c1a25de98c7d7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Reasons to Stay Alive",
+ "price": 26.41,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/reasons-to-stay-alive_959/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cb/bd/cbbdb0222ee8a0f6ab61657412a15794.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Private Paris (Private #10)",
+ "price": 47.61,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/private-paris-private-10_958/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9d/05/9d0533bae1578846d728a82913b95c26.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "#HigherSelfie: Wake Up Your Life. Free Your Soul. Find Your Tribe.",
+ "price": 23.11,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/higherselfie-wake-up-your-life-free-your-soul-find-your-tribe_957/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9c/46/9c463c7631c82401160fd3b554b8f0e1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Without Borders (Wanderlove #1)",
+ "price": 45.07,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/without-borders-wanderlove-1_956/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/24/e2/24e2f5c9d325c4004d8190c054da86dd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "When We Collided",
+ "price": 31.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/when-we-collided_955/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/08/04/08044269fc197645268a6197c57e6173.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "We Love You, Charlie Freeman",
+ "price": 50.27,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/we-love-you-charlie-freeman_954/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5f/15/5f152afdbc42356ecba02f61058a7e5b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Untitled Collection: Sabbath Poems 2014",
+ "price": 14.27,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/untitled-collection-sabbath-poems-2014_953/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f9/3b/f93b4a650f03a5d21f2436d7813f42c2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Unseen City: The Majesty of Pigeons, the Discreet Charm of Snails \u0026 Other Wonders of the Urban Wilderness",
+ "price": 44.18,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/unseen-city-the-majesty-of-pigeons-the-discreet-charm-of-snails-other-wonders-of-the-urban-wilderness_952/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/41/a2/41a20f35adf0caea24f208dc01ad7681.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Unicorn Tracks",
+ "price": 18.78,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/unicorn-tracks_951/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/76/8e/768ea5924ac1ef6297c2be9959c796c2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Unbound: How Eight Technologies Made Us Human, Transformed Society, and Brought Our World to the Brink",
+ "price": 25.52,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/unbound-how-eight-technologies-made-us-human-transformed-society-and-brought-our-world-to-the-brink_950/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4a/3b/4a3b055f9e378a95fedbef55e7bab7ce.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Tsubasa: WoRLD CHRoNiCLE 2 (Tsubasa WoRLD CHRoNiCLE #2)",
+ "price": 16.28,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/tsubasa-world-chronicle-2-tsubasa-world-chronicle-2_949/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/36/df/36df4caaf1420b1183a8235355d39e69.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Throwing Rocks at the Google Bus: How Growth Became the Enemy of Prosperity",
+ "price": 31.12,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/throwing-rocks-at-the-google-bus-how-growth-became-the-enemy-of-prosperity_948/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/03/86/038650c9e7517b4baf2a423cd8eed38f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "This One Summer",
+ "price": 19.49,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/this-one-summer_947/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c4/dd/c4ddd9ced89966b0602ec85e00cd5b61.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Thirst",
+ "price": 17.27,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/thirst_946/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c4/0a/c40a64f59e7487b1a80a049f6ceb2ba5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Torch Is Passed: A Harding Family Story",
+ "price": 19.09,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-torch-is-passed-a-harding-family-story_945/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/33/e5/33e507172541628acfd421503196b578.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Secret of Dreadwillow Carse",
+ "price": 56.13,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-secret-of-dreadwillow-carse_944/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c4/a2/c4a2a1a026c67bcceb5a411c724d7d0c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Pioneer Woman Cooks: Dinnertime: Comfort Classics, Freezer Food, 16-Minute Meals, and Other Delicious Ways to Solve Supper!",
+ "price": 56.41,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-pioneer-woman-cooks-dinnertime-comfort-classics-freezer-food-16-minute-meals-and-other-delicious-ways-to-solve-supper_943/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b7/f4/b7f4843dbe062d44be1ffcfa16b2faa4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Past Never Ends",
+ "price": 56.5,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-past-never-ends_942/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/89/b8/89b850edb01851a91f64ba114b96acb6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Natural History of Us (The Fine Art of Pretending #2)",
+ "price": 45.22,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-natural-history-of-us-the-fine-art-of-pretending-2_941/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5d/7f/5d7f496cdf5e5962a73ecdcc1505c1d5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Nameless City (The Nameless City #1)",
+ "price": 38.16,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-nameless-city-the-nameless-city-1_940/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f4/79/f479de5f305c2ac0512702cf7155bb74.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Murder That Never Was (Forensic Instincts #5)",
+ "price": 54.11,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-murder-that-never-was-forensic-instincts-5_939/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/dc/44/dc44f8e2aebac48ca8553814d9b021a8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Most Perfect Thing: Inside (and Outside) a Bird\u0027s Egg",
+ "price": 42.96,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-most-perfect-thing-inside-and-outside-a-birds-egg_938/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d4/8d/d48d5122a15347e9fe2b15ad354d69bf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Mindfulness and Acceptance Workbook for Anxiety: A Guide to Breaking Free from Anxiety, Phobias, and Worry Using Acceptance and Commitment Therapy",
+ "price": 23.89,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-mindfulness-and-acceptance-workbook-for-anxiety-a-guide-to-breaking-free-from-anxiety-phobias-and-worry-using-acceptance-and-commitment-therapy_937/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f8/6d/f86d08178e3788563ac17be5aefd29f0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Life-Changing Magic of Tidying Up: The Japanese Art of Decluttering and Organizing",
+ "price": 16.77,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-life-changing-magic-of-tidying-up-the-japanese-art-of-decluttering-and-organizing_936/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/95/64/95647d6a526bf54120b9445e124794e1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Inefficiency Assassin: Time Management Tactics for Working Smarter, Not Longer",
+ "price": 20.59,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-inefficiency-assassin-time-management-tactics-for-working-smarter-not-longer_935/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/75/dc/75dce2f5949b407161f37f0af249b018.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Gutsy Girl: Escapades for Your Life of Epic Adventure",
+ "price": 37.13,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-gutsy-girl-escapades-for-your-life-of-epic-adventure_934/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/64/15/641570cd7e7aded53c7d33d78a9629f1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Electric Pencil: Drawings from Inside State Hospital No. 3",
+ "price": 56.06,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-electric-pencil-drawings-from-inside-state-hospital-no-3_933/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2e/23/2e236e23ad52aa74505f224f6552eda8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Death of Humanity: and the Case for Life",
+ "price": 58.11,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-death-of-humanity-and-the-case-for-life_932/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/71/df/71df730cf38c232ee58a2e407135f055.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Bulletproof Diet: Lose up to a Pound a Day, Reclaim Energy and Focus, Upgrade Your Life",
+ "price": 49.05,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-bulletproof-diet-lose-up-to-a-pound-a-day-reclaim-energy-and-focus-upgrade-your-life_931/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ee/3e/ee3e219d23e73ba71c79b700f183aaed.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Art Forger",
+ "price": 40.76,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-art-forger_930/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/70/fa/70fa6c0437d9c97dbeada6bd32bf9d2c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Age of Genius: The Seventeenth Century and the Birth of the Modern Mind",
+ "price": 19.73,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-age-of-genius-the-seventeenth-century-and-the-birth-of-the-modern-mind_929/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2d/4e/2d4e358712e6c9f1d3bdd78d1a16e5a8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Activist\u0027s Tao Te Ching: Ancient Advice for a Modern Revolution",
+ "price": 32.24,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-activists-tao-te-ching-ancient-advice-for-a-modern-revolution_928/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/96/db/96db61bb53930c560fb4c1c62b583816.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Spark Joy: An Illustrated Master Class on the Art of Organizing and Tidying Up",
+ "price": 41.83,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/spark-joy-an-illustrated-master-class-on-the-art-of-organizing-and-tidying-up_927/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f3/4f/f34ffb24cc21c9f9f52dad4fd8f3ac21.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Soul Reader",
+ "price": 39.58,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/soul-reader_926/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/69/85/69852567cf97264a1442cbc882c84903.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Security",
+ "price": 39.25,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/security_925/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/da/df/dadfac66a89774b46b10225362724c83.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Saga, Volume 6 (Saga (Collected Editions) #6)",
+ "price": 25.02,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/saga-volume-6-saga-collected-editions-6_924/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/43/ae/43aee83ebb31e2122a7215e413770e5c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Saga, Volume 5 (Saga (Collected Editions) #5)",
+ "price": 51.04,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/saga-volume-5-saga-collected-editions-5_923/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e1/ea/e1ea6cb36e62ae6dc7b805f68ab9a700.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Reskilling America: Learning to Labor in the Twenty-First Century",
+ "price": 19.83,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/reskilling-america-learning-to-labor-in-the-twenty-first-century_922/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/97/f8/97f8debeeaaece9603267653076e760f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Rat Queens, Vol. 3: Demons (Rat Queens (Collected Editions) #11-15)",
+ "price": 50.4,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/rat-queens-vol-3-demons-rat-queens-collected-editions-11-15_921/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f3/ef/f3efd43ae0fa85d9b325d5e8783e7af5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Princess Jellyfish 2-in-1 Omnibus, Vol. 01 (Princess Jellyfish 2-in-1 Omnibus #1)",
+ "price": 13.61,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/princess-jellyfish-2-in-1-omnibus-vol-01-princess-jellyfish-2-in-1-omnibus-1_920/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/78/0b/780b2c28122750c2c383846155815bf7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Princess Between Worlds (Wide-Awake Princess #5)",
+ "price": 13.34,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/princess-between-worlds-wide-awake-princess-5_919/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b7/e8/b7e84b78be3d9bb79b71156a5e5d4e42.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Pop Gun War, Volume 1: Gift",
+ "price": 18.97,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/pop-gun-war-volume-1-gift_918/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c8/2f/c82f629a31b3f47bdb17ac14aa51076d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Political Suicide: Missteps, Peccadilloes, Bad Calls, Backroom Hijinx, Sordid Pasts, Rotten Breaks, and Just Plain Dumb Mistakes in the Annals of American Politics",
+ "price": 36.28,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/political-suicide-missteps-peccadilloes-bad-calls-backroom-hijinx-sordid-pasts-rotten-breaks-and-just-plain-dumb-mistakes-in-the-annals-of-american-politics_917/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/64/44/6444dacdcb9edaadbbd691524622aeb8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Patience",
+ "price": 10.16,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/patience_916/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/01/72/01726c619a05114dca75bd840095016d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Outcast, Vol. 1: A Darkness Surrounds Him (Outcast #1)",
+ "price": 15.44,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/outcast-vol-1-a-darkness-surrounds-him-outcast-1_915/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cb/00/cb004189f548d75ad430d3ed19e6daa9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "orange: The Complete Collection 1 (orange: The Complete Collection #1)",
+ "price": 48.41,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/orange-the-complete-collection-1-orange-the-complete-collection-1_914/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/03/88/03886a8502ca54dbce0d91c2568ab69d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Online Marketing for Busy Authors: A Step-By-Step Guide",
+ "price": 46.35,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/online-marketing-for-busy-authors-a-step-by-step-guide_913/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ea/9b/ea9b2cb8abbb317402e618445bade1e1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "On a Midnight Clear",
+ "price": 14.07,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/on-a-midnight-clear_912/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a1/14/a114d70e7babf110ba42a389078e9a45.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Obsidian (Lux #1)",
+ "price": 14.86,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/obsidian-lux-1_911/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fc/72/fc72f158554b4b4164701e1dfa1153c7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "My Paris Kitchen: Recipes and Stories",
+ "price": 33.37,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/my-paris-kitchen-recipes-and-stories_910/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f5/65/f565af3d9dd20a1ad72a1e7c4157387d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Masks and Shadows",
+ "price": 56.4,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/masks-and-shadows_909/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ff/e8/ffe81bf98f8386ef29e193abfb6f9c1e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Mama Tried: Traditional Italian Cooking for the Screwed, Crude, Vegan, and Tattooed",
+ "price": 14.02,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/mama-tried-traditional-italian-cooking-for-the-screwed-crude-vegan-and-tattooed_908/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/10/c6/10c61093002db1fec4089d8076678624.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Lumberjanes, Vol. 2: Friendship to the Max (Lumberjanes #5-8)",
+ "price": 46.91,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/lumberjanes-vol-2-friendship-to-the-max-lumberjanes-5-8_907/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d3/15/d3158e8d3546fb90cced3c1d44a92a34.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Lumberjanes, Vol. 1: Beware the Kitten Holy (Lumberjanes #1-4)",
+ "price": 45.61,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/lumberjanes-vol-1-beware-the-kitten-holy-lumberjanes-1-4_906/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7e/a0/7ea062007ef00107e3c16d336b41fab2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Lumberjanes Vol. 3: A Terrible Plan (Lumberjanes #9-12)",
+ "price": 19.92,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/lumberjanes-vol-3-a-terrible-plan-lumberjanes-9-12_905/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5f/b1/5fb1bf88dcfda795606745ce35be5975.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Layered: Baking, Building, and Styling Spectacular Cakes",
+ "price": 40.11,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/layered-baking-building-and-styling-spectacular-cakes_904/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/98/d1/98d1c979c4bac9e147a6718946578b0f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Judo: Seven Steps to Black Belt (an Introductory Guide for Beginners)",
+ "price": 53.9,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/judo-seven-steps-to-black-belt-an-introductory-guide-for-beginners_903/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5f/52/5f52b1bc6d45daab2e330c744feb0359.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Join",
+ "price": 35.67,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/join_902/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/93/63/9363f0065fbad5689f44fcf6e203eef3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "In the Country We Love: My Family Divided",
+ "price": 22.0,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/in-the-country-we-love-my-family-divided_901/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fe/ea/feeafd2ad7b3077f8e74cbb1da9e3c7d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Immunity: How Elie Metchnikoff Changed the Course of Modern Medicine",
+ "price": 57.36,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/immunity-how-elie-metchnikoff-changed-the-course-of-modern-medicine_900/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/26/1c/261c4eaf957ae4aacf2229b482e76dbe.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "I Hate Fairyland, Vol. 1: Madly Ever After (I Hate Fairyland (Compilations) #1-5)",
+ "price": 29.17,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/i-hate-fairyland-vol-1-madly-ever-after-i-hate-fairyland-compilations-1-5_899/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/aa/74/aa74004807e97a79aa084b5db329a99b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "I am a Hero Omnibus Volume 1",
+ "price": 54.63,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/i-am-a-hero-omnibus-volume-1_898/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/16/d4/16d443437126bf6d536a89312c1995a5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "How to Be Miserable: 40 Strategies You Already Use",
+ "price": 46.03,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/how-to-be-miserable-40-strategies-you-already-use_897/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/da/8b/da8bc9b824dd3f446ef63e438ddbfc85.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Her Backup Boyfriend (The Sorensen Family #1)",
+ "price": 33.97,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/her-backup-boyfriend-the-sorensen-family-1_896/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1e/bb/1ebbbc3e2d3249b111033cfc40763b0b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Giant Days, Vol. 2 (Giant Days #5-8)",
+ "price": 22.11,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/giant-days-vol-2-giant-days-5-8_895/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/90/6f/906f0168b0e155a7077625499b1737b5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Forever and Forever: The Courtship of Henry Longfellow and Fanny Appleton",
+ "price": 29.69,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/forever-and-forever-the-courtship-of-henry-longfellow-and-fanny-appleton_894/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d6/58/d658a1485b130ff26ca5fb0d5975ed2e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "First and First (Five Boroughs #3)",
+ "price": 15.97,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/first-and-first-five-boroughs-3_893/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c4/d1/c4d1517cc9370e292366b6132ca9ca36.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Fifty Shades Darker (Fifty Shades #2)",
+ "price": 21.96,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/fifty-shades-darker-fifty-shades-2_892/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cc/bd/ccbdae9e29b3594301528fa2c876ec29.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Everydata: The Misinformation Hidden in the Little Data You Consume Every Day",
+ "price": 54.35,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/everydata-the-misinformation-hidden-in-the-little-data-you-consume-every-day_891/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/64/94/6494bf61176ca73b61255909230030be.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Don\u0027t Be a Jerk: And Other Practical Advice from Dogen, Japan\u0027s Greatest Zen Master",
+ "price": 37.97,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/dont-be-a-jerk-and-other-practical-advice-from-dogen-japans-greatest-zen-master_890/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/95/30/953013d044aa313cc162dec414f3969a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Danganronpa Volume 1",
+ "price": 51.99,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/danganronpa-volume-1_889/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/78/97/7897eea91c4a85aca58d925861d4afec.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Crown of Midnight (Throne of Glass #2)",
+ "price": 43.29,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/crown-of-midnight-throne-of-glass-2_888/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/66/25/6625e3bbb050de3e42a0c302c0d69f1f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Codename Baboushka, Volume 1: The Conclave of Death",
+ "price": 36.72,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/codename-baboushka-volume-1-the-conclave-of-death_887/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f6/88/f688a9d6a89fdf38e4e88439ee9eda69.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Camp Midnight",
+ "price": 17.08,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/camp-midnight_886/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/dd/c9/ddc95df6754df8e71bf969c088056188.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Call the Nurse: True Stories of a Country Nurse on a Scottish Isle",
+ "price": 29.14,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/call-the-nurse-true-stories-of-a-country-nurse-on-a-scottish-isle_885/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/88/9e/889e0bac4c7c0e7178f0165b8d3b4617.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Burning",
+ "price": 28.81,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/burning_884/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/26/95/269507c7bb35d2cec9b61a03d1c28e67.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Bossypants",
+ "price": 49.46,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/bossypants_883/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/27/d2/27d20361745ec2f7be668b18a4da29da.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Bitch Planet, Vol. 1: Extraordinary Machine (Bitch Planet (Collected Editions))",
+ "price": 37.92,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/bitch-planet-vol-1-extraordinary-machine-bitch-planet-collected-editions_882/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e4/1d/e41d34204a1fffbf825d8beb3dbf4cbc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Avatar: The Last Airbender: Smoke and Shadow, Part 3 (Smoke and Shadow #3)",
+ "price": 28.09,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/avatar-the-last-airbender-smoke-and-shadow-part-3-smoke-and-shadow-3_881/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/06/18/061811c5845d0e13bc04b2a755f0830f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Algorithms to Live By: The Computer Science of Human Decisions",
+ "price": 30.81,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/algorithms-to-live-by-the-computer-science-of-human-decisions_880/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/23/b4/23b42e094c02d52b14b11a960d49610e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "A World of Flavor: Your Gluten Free Passport",
+ "price": 42.95,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-world-of-flavor-your-gluten-free-passport_879/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/78/2e/782e315667ec50759b8603527ee33dec.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "A Piece of Sky, a Grain of Rice: A Memoir in Four Meditations",
+ "price": 56.76,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-piece-of-sky-a-grain-of-rice-a-memoir-in-four-meditations_878/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/08/89/088995e862aac86c88c608d763f6390e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "A Murder in Time",
+ "price": 16.64,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-murder-in-time_877/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/11/aa/11aaad48b5f15e262456ca65294084da.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "A Flight of Arrows (The Pathfinders #2)",
+ "price": 55.53,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-flight-of-arrows-the-pathfinders-2_876/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/82/96/8296f92b70fb1dafefecda92c1d51941.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "A Fierce and Subtle Poison",
+ "price": 28.13,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/a-fierce-and-subtle-poison_875/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/12/f1/12f1963957f27fa83d51f76b183ef490.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "A Court of Thorns and Roses (A Court of Thorns and Roses #1)",
+ "price": 52.37,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-court-of-thorns-and-roses-a-court-of-thorns-and-roses-1_874/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c0/88/c08816960890396213a423941af65b8f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "(Un)Qualified: How God Uses Broken People to Do Big Things",
+ "price": 54.0,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/unqualified-how-god-uses-broken-people-to-do-big-things_873/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cd/db/cddb3eb483ef11a088d519205b7098fb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "You Are What You Love: The Spiritual Power of Habit",
+ "price": 21.87,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/you-are-what-you-love-the-spiritual-power-of-habit_872/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6b/70/6b70f2cdb17d9ab7551240a88b9211fe.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "William Shakespeare\u0027s Star Wars: Verily, A New Hope (William Shakespeare\u0027s Star Wars #4)",
+ "price": 43.3,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/william-shakespeares-star-wars-verily-a-new-hope-william-shakespeares-star-wars-4_871/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/02/37/0237b445efc18c5562355a5a2c40889c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Tuesday Nights in 1980",
+ "price": 21.04,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/tuesday-nights-in-1980_870/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6b/da/6bdae061cb92c32b0b83cda8dd10275d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Tracing Numbers on a Train",
+ "price": 41.6,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/tracing-numbers-on-a-train_869/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/06/a6/06a6cfcf89afd1601cbba1a16cda57fb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Throne of Glass (Throne of Glass #1)",
+ "price": 35.07,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/throne-of-glass-throne-of-glass-1_868/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/32/d6/32d6aa560e8ddf2a4da1526b95d4c7ab.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Thomas Jefferson and the Tripoli Pirates: The Forgotten War That Changed American History",
+ "price": 59.64,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/thomas-jefferson-and-the-tripoli-pirates-the-forgotten-war-that-changed-american-history_867/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/97/47/974709d437b08e74649b5744471bf472.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Thirteen Reasons Why",
+ "price": 52.72,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/thirteen-reasons-why_866/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8a/83/8a83b6ce350f01bab21f85e6ba539316.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The White Cat and the Monk: A Retelling of the Poem “Pangur Bán”",
+ "price": 58.08,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-white-cat-and-the-monk-a-retelling-of-the-poem-pangur-ban_865/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/26/32/2632a1e12f2c085fabbe022ae4cd6933.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Wedding Dress",
+ "price": 24.12,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-wedding-dress_864/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/28/99/28992d89f4abf54fba183fc8d074adf3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Vacationers",
+ "price": 42.15,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-vacationers_863/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/37/25/372578cc073efae80cf284b56040a488.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Third Wave: An Entrepreneur’s Vision of the Future",
+ "price": 12.61,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-third-wave-an-entrepreneurs-vision-of-the-future_862/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d0/77/d077a30042df6b916bfc8d257345c69e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Stranger",
+ "price": 17.44,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-stranger_861/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ea/04/ea0476a6f4c318ceccf5e2f2b39f2b15.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Shadow Hero (The Shadow Hero)",
+ "price": 33.14,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-shadow-hero-the-shadow-hero_860/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1f/62/1f621dda1b302fc16d83d94b0b5ac31c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Secret (The Secret #1)",
+ "price": 27.37,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-secret-the-secret-1_859/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4e/0f/4e0f05ae01d8fb6bd0d3901edd06de16.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Regional Office Is Under Attack!",
+ "price": 51.36,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-regional-office-is-under-attack_858/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f8/31/f8314c7fdaa79fb7191a583e9a852db8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Psychopath Test: A Journey Through the Madness Industry",
+ "price": 36.0,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-psychopath-test-a-journey-through-the-madness-industry_857/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/34/f5/34f5f8e513c5f048241f5695e61b2483.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Project",
+ "price": 10.65,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-project_856/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/10/6e/106e2fc7160712edf8e2ff996dc8cd6c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Power of Now: A Guide to Spiritual Enlightenment",
+ "price": 43.54,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-power-of-now-a-guide-to-spiritual-enlightenment_855/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/03/38/0338682e76bad3216cd4c6c28b2b625a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Omnivore\u0027s Dilemma: A Natural History of Four Meals",
+ "price": 38.21,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-omnivores-dilemma-a-natural-history-of-four-meals_854/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/14/f3/14f3d525e2a114cd71e27201a16af188.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Nerdy Nummies Cookbook: Sweet Treats for the Geek in All of Us",
+ "price": 37.34,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-nerdy-nummies-cookbook-sweet-treats-for-the-geek-in-all-of-us_853/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/61/bd/61bdfe3950643c47d70c37c4123530f3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Murder of Roger Ackroyd (Hercule Poirot #4)",
+ "price": 44.1,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-murder-of-roger-ackroyd-hercule-poirot-4_852/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/29/fe/29fe70b1b2e5a9ba61d4bd331255e19e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Mistake (Off-Campus #2)",
+ "price": 43.29,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-mistake-off-campus-2_851/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a5/43/a543b100a8c1861c1bf5374ca6b576fe.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Matchmaker\u0027s Playbook (Wingmen Inc. #1)",
+ "price": 55.85,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-matchmakers-playbook-wingmen-inc-1_850/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/84/ac/84acb0606c96e55dc729a9d6572a08fb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Love and Lemons Cookbook: An Apple-to-Zucchini Celebration of Impromptu Cooking",
+ "price": 37.6,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-love-and-lemons-cookbook-an-apple-to-zucchini-celebration-of-impromptu-cooking_849/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0d/1f/0d1f3f934460f5a50aaa8c366641234c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Long Shadow of Small Ghosts: Murder and Memory in an American City",
+ "price": 10.97,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-long-shadow-of-small-ghosts-murder-and-memory-in-an-american-city_848/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f2/e5/f2e51dd2b26600459f8eaeb6b9eecaa7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Kite Runner",
+ "price": 41.82,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-kite-runner_847/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/58/9d/589d73503d9a23d224de836134fae553.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The House by the Lake",
+ "price": 36.95,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-house-by-the-lake_846/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0d/cb/0dcb33d60b0e79adf8ab9842e697ea2e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Glittering Court (The Glittering Court #1)",
+ "price": 44.28,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-glittering-court-the-glittering-court-1_845/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3e/0b/3e0b16851bec08b6cbf78d5f64af9114.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Girl on the Train",
+ "price": 55.02,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-girl-on-the-train_844/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/25/6c/256c946dd0962095f66c6de3b15ab300.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Genius of Birds",
+ "price": 17.24,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-genius-of-birds_843/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/13/57/1357c6aa40c9e63d2f931927fbf81f3f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Emerald Mystery",
+ "price": 23.15,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-emerald-mystery_842/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/81/58/81586cd0bf8743e1f5ed80b6a0e1fabe.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Cookies \u0026 Cups Cookbook: 125+ sweet \u0026 savory recipes reminding you to Always Eat Dessert First",
+ "price": 41.25,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-cookies-cups-cookbook-125-sweet-savory-recipes-reminding-you-to-always-eat-dessert-first_841/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/54/89/54899b4584e941ceced511d81092c88a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Bridge to Consciousness: I\u0027m Writing the Bridge Between Science and Our Old and New Beliefs.",
+ "price": 32.0,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-bridge-to-consciousness-im-writing-the-bridge-between-science-and-our-old-and-new-beliefs_840/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fe/b7/feb764b2afa54991cfdbbffdf501b333.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Artist\u0027s Way: A Spiritual Path to Higher Creativity",
+ "price": 38.49,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-artists-way-a-spiritual-path-to-higher-creativity_839/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0e/6d/0e6dc2484322c5b9e7854ced66fdf62d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Art of War",
+ "price": 33.34,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-art-of-war_838/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6d/71/6d71e36c8b1b9c885e1bb6c72cd8bcf8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Argonauts",
+ "price": 10.93,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-argonauts_837/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0a/15/0a1567cd04a6582d333db71337b4e2a6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The 10% Entrepreneur: Live Your Startup Dream Without Quitting Your Day Job",
+ "price": 27.55,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-10-entrepreneur-live-your-startup-dream-without-quitting-your-day-job_836/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/82/93/82939ca78da0b724f16ec814849514fd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Suddenly in Love (Lake Haven #1)",
+ "price": 55.99,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/suddenly-in-love-lake-haven-1_835/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e9/f4/e9f4bc8cf5ffaea1504623c936e90a48.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Something More Than This",
+ "price": 16.24,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/something-more-than-this_834/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/59/10/5910fbd8a95e8e9de9c660b71e0694e2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Soft Apocalypse",
+ "price": 26.12,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/soft-apocalypse_833/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f0/06/f0060c756556b855184fa32f66280961.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "So You\u0027ve Been Publicly Shamed",
+ "price": 12.23,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/so-youve-been-publicly-shamed_832/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6e/d4/6ed4991d97f60db29ec7b421e61a2cf3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Shoe Dog: A Memoir by the Creator of NIKE",
+ "price": 23.99,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/shoe-dog-a-memoir-by-the-creator-of-nike_831/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/19/aa/19aa1184a3565b1dae6092146018e109.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Shobu Samurai, Project Aryoku (#3)",
+ "price": 29.06,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/shobu-samurai-project-aryoku-3_830/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ae/0c/ae0ccc307568b6d7699786411f3cbcc4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Secrets and Lace (Fatal Hearts #1)",
+ "price": 20.27,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/secrets-and-lace-fatal-hearts-1_829/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/84/7c/847c06b541e2a3b2228b96d97a5fe7a6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Scarlett Epstein Hates It Here",
+ "price": 43.55,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/scarlett-epstein-hates-it-here_828/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0f/d3/0fd306891f8fd3196653022fd67d6c87.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Romero and Juliet: A Tragic Tale of Love and Zombies",
+ "price": 36.94,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/romero-and-juliet-a-tragic-tale-of-love-and-zombies_827/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/12/f8/12f8002e5aab6d783e29b31aad36b5ba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Redeeming Love",
+ "price": 20.47,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/redeeming-love_826/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/21/21/2121ba78e26194d92c334fde3850f840.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Poses for Artists Volume 1 - Dynamic and Sitting Poses: An Essential Reference for Figure Drawing and the Human Form",
+ "price": 41.06,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/poses-for-artists-volume-1-dynamic-and-sitting-poses-an-essential-reference-for-figure-drawing-and-the-human-form_825/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5a/89/5a89e2dd7866dda6660fe508bc4b5249.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Poems That Make Grown Women Cry",
+ "price": 14.19,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/poems-that-make-grown-women-cry_824/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/38/64/386468a8c3e6b880664bf7885bf6f726.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Nightingale, Sing",
+ "price": 38.28,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/nightingale-sing_823/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/18/08/18086e581ad354aa65f945c2b5c51350.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Night Sky with Exit Wounds",
+ "price": 41.05,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/night-sky-with-exit-wounds_822/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/25/54/2554431c797ec725eea50b3f8a83758c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Mrs. Houdini",
+ "price": 30.25,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/mrs-houdini_821/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0e/fe/0efe86960cdff718aed01a5c3f65b1c3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Modern Romance",
+ "price": 28.26,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/modern-romance_820/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/28/78/2878538a1039d9c4649110499a1393fb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Miss Peregrine’s Home for Peculiar Children (Miss Peregrine’s Peculiar Children #1)",
+ "price": 10.76,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/miss-peregrines-home-for-peculiar-children-miss-peregrines-peculiar-children-1_819/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/01/26/01264865c12ed6d987d6f0858cd1d0ba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Louisa: The Extraordinary Life of Mrs. Adams",
+ "price": 16.85,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/louisa-the-extraordinary-life-of-mrs-adams_818/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6f/d9/6fd92e5143cbd5bb8bcf034e5f007dde.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Little Red",
+ "price": 13.47,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/little-red_817/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/80/25/8025b80a40178f2a6dd4f99ad88e0fba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Library of Souls (Miss Peregrine’s Peculiar Children #3)",
+ "price": 48.56,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/library-of-souls-miss-peregrines-peculiar-children-3_816/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f8/54/f85417465a73e33604624205ba8306cc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Large Print Heart of the Pride",
+ "price": 19.15,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/large-print-heart-of-the-pride_815/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bd/e9/bde95ab9f776c911a7aa759cad60bb41.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "I Had a Nice Time And Other Lies...: How to find love \u0026 sh*t like that",
+ "price": 57.36,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/i-had-a-nice-time-and-other-lies-how-to-find-love-sht-like-that_814/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5f/72/5f72c8a0d5a7292e2929a354ec8a022f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Hollow City (Miss Peregrine’s Peculiar Children #2)",
+ "price": 42.98,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/hollow-city-miss-peregrines-peculiar-children-2_813/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e2/60/e260b008b7ea7970562295b7bc64b0cb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Grumbles",
+ "price": 22.16,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/grumbles_812/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d6/1b/d61b12ef0e69d49e2645537dd6a8472a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Full Moon over Noah’s Ark: An Odyssey to Mount Ararat and Beyond",
+ "price": 49.43,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/full-moon-over-noahs-ark-an-odyssey-to-mount-ararat-and-beyond_811/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/57/77/57770cac1628f4407636635f4b85e88c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Frostbite (Vampire Academy #2)",
+ "price": 29.99,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/frostbite-vampire-academy-2_810/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/71/76/7176317f1915fa0658bb2fe400441207.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Follow You Home",
+ "price": 21.36,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/follow-you-home_809/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a7/4b/a74b35375ce874153fd352e33bc7bac9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "First Steps for New Christians (Print Edition)",
+ "price": 29.0,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/first-steps-for-new-christians-print-edition_808/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f1/73/f1731459b1e2f4becf2c52b8f30b8cd7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Finders Keepers (Bill Hodges Trilogy #2)",
+ "price": 53.53,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/finders-keepers-bill-hodges-trilogy-2_807/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6a/81/6a81103b1c01a3f6c56e5718a838a4c8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Fables, Vol. 1: Legends in Exile (Fables #1)",
+ "price": 41.62,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/fables-vol-1-legends-in-exile-fables-1_806/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/51/8c/518c184a793b751b43045637c8002eb7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Eureka Trivia 6.0",
+ "price": 54.59,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/eureka-trivia-60_805/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/96/17/96173470df6fc6fef4d0008e957653ce.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Drive: The Surprising Truth About What Motivates Us",
+ "price": 34.95,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/drive-the-surprising-truth-about-what-motivates-us_804/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8a/49/8a490347afdc10abe7c2099e466de32f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Done Rubbed Out (Reightman \u0026 Bailey #1)",
+ "price": 37.72,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/done-rubbed-out-reightman-bailey-1_803/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/08/4d/084da0199a717cb6c1eda30f98d0ea4c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Doing It Over (Most Likely To #1)",
+ "price": 35.61,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/doing-it-over-most-likely-to-1_802/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e9/25/e9250495a525eb203652ad9da85ccb8e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Deliciously Ella Every Day: Quick and Easy Recipes for Gluten-Free Snacks, Packed Lunches, and Simple Meals",
+ "price": 42.16,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/deliciously-ella-every-day-quick-and-easy-recipes-for-gluten-free-snacks-packed-lunches-and-simple-meals_801/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/20/f2/20f28657b49f8cb24ed2ec6448bb6df3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Dark Notes",
+ "price": 19.19,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/dark-notes_800/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6e/4e/6e4e8f4f4abd94356a9be840e4681e65.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Daring Greatly: How the Courage to Be Vulnerable Transforms the Way We Live, Love, Parent, and Lead",
+ "price": 19.43,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/daring-greatly-how-the-courage-to-be-vulnerable-transforms-the-way-we-live-love-parent-and-lead_799/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/55/ce/55ced903becc59121d6edb47a4dcfb56.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Close to You",
+ "price": 49.46,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/close-to-you_798/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fa/f6/faf6d69a42f477e1da80a71f05a4dc25.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Chasing Heaven: What Dying Taught Me About Living",
+ "price": 37.8,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/chasing-heaven-what-dying-taught-me-about-living_797/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b7/6a/b76a73640d26b09c4a6f373b09050bed.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Big Magic: Creative Living Beyond Fear",
+ "price": 30.8,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/big-magic-creative-living-beyond-fear_796/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/62/ad/62ad9b4077416ddc0c4908062bca0e5e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Becoming Wise: An Inquiry into the Mystery and Art of Living",
+ "price": 27.43,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/becoming-wise-an-inquiry-into-the-mystery-and-art-of-living_795/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ff/69/ff69c96b05affa03f647287e46210bf9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Beauty Restored (Riley Family Legacy Novellas #3)",
+ "price": 11.11,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/beauty-restored-riley-family-legacy-novellas-3_794/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/51/6f/516f605a957a1f5592b81f4e06c491bb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Batman: The Long Halloween (Batman)",
+ "price": 36.5,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/batman-the-long-halloween-batman_793/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/78/a7/78a7f184a4d6d62412861c68f1c3ad90.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Batman: The Dark Knight Returns (Batman)",
+ "price": 15.38,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/batman-the-dark-knight-returns-batman_792/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/be/a9/bea95dbd7b2a843519c9a1dcfc433f9b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Ayumi\u0027s Violin",
+ "price": 15.48,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/ayumis-violin_791/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fa/18/fa18c44fba20b8191f6a88e2e28092fd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Anonymous",
+ "price": 46.82,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/anonymous_790/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fb/75/fb75a0ce3e0b01fa3852806c6d1f1af6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Amy Meets the Saints and Sages",
+ "price": 18.46,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/amy-meets-the-saints-and-sages_789/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/00/53/0053efa8515b8e2ad9b029c298766e9f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Amid the Chaos",
+ "price": 36.58,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/amid-the-chaos_788/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/52/46/524655fade1d9fe1475395a3eaff827a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Amatus",
+ "price": 50.54,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/amatus_787/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8f/92/8f92c3b5dc8f5c1a23324bda7477b19c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Agnostic: A Spirited Manifesto",
+ "price": 12.51,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/agnostic-a-spirited-manifesto_786/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9f/fc/9ffc43826233092d2acb4414f86627eb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Zealot: The Life and Times of Jesus of Nazareth",
+ "price": 24.7,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/zealot-the-life-and-times-of-jesus-of-nazareth_785/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3d/60/3d6003fc37b842a07c2dbe28e47448e1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "You (You #1)",
+ "price": 43.61,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/you-you-1_784/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d6/97/d697268540fa982f4dce39f61ed3a342.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Wonder Woman: Earth One, Volume One (Wonder Woman: Earth One #1)",
+ "price": 37.34,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/wonder-woman-earth-one-volume-one-wonder-woman-earth-one-1_783/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/19/39/19396172462f4cc0504d4e6e8b0e1647.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Wild Swans",
+ "price": 14.36,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/wild-swans_782/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bb/72/bb723ad463531c602ad8bcb244253bf3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Why the Right Went Wrong: Conservatism--From Goldwater to the Tea Party and Beyond",
+ "price": 52.65,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/why-the-right-went-wrong-conservatism-from-goldwater-to-the-tea-party-and-beyond_781/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/db/1b/db1babd3c09b84da800b0e9897fe0097.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Whole Lotta Creativity Going On: 60 Fun and Unusual Exercises to Awaken and Strengthen Your Creativity",
+ "price": 38.2,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/whole-lotta-creativity-going-on-60-fun-and-unusual-exercises-to-awaken-and-strengthen-your-creativity_780/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ba/36/ba368dfb2b6ae9979ff59d049c626167.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "What\u0027s It Like in Space?: Stories from Astronauts Who\u0027ve Been There",
+ "price": 19.6,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/whats-it-like-in-space-stories-from-astronauts-whove-been-there_779/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/43/b7/43b70859e93901b019791cef86539ffc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "We Are Robin, Vol. 1: The Vigilante Business (We Are Robin #1)",
+ "price": 53.9,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/we-are-robin-vol-1-the-vigilante-business-we-are-robin-1_778/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/66/d6/66d6d2b4c0acfa8f40ad0285186ed2d8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Walt Disney\u0027s Alice in Wonderland",
+ "price": 12.96,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/walt-disneys-alice-in-wonderland_777/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/28/50/2850439c2ba103fb69dba9cd2dd9f0c2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "V for Vendetta (V for Vendetta Complete)",
+ "price": 37.1,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/v-for-vendetta-v-for-vendetta-complete_776/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cc/8f/cc8fb914bfee31a7903a5cabaae64796.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Until Friday Night (The Field Party #1)",
+ "price": 46.31,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/until-friday-night-the-field-party-1_775/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/19/cf/19cf50aea5bf0e8f4bc016f3745b3dfe.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Unbroken: A World War II Story of Survival, Resilience, and Redemption",
+ "price": 45.95,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/unbroken-a-world-war-ii-story-of-survival-resilience-and-redemption_774/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/74/cd/74cd3f345b50452c3be6631669f13aa8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Twenty Yawns",
+ "price": 22.08,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/twenty-yawns_773/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2b/38/2b380f77723c797c0389f978afa6db58.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Through the Woods",
+ "price": 25.38,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/through-the-woods_772/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4c/af/4caf8f2a5ee8828d408cc8faadd3419c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "This Is Where It Ends",
+ "price": 27.12,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/this-is-where-it-ends_771/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/18/0b/180bfe1902cb3c0eb77d7c712efa2a96.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Year of Magical Thinking",
+ "price": 43.04,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-year-of-magical-thinking_770/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bf/e5/bfe526c22c7c08235c27a6474ebb4db9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Wright Brothers",
+ "price": 56.8,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-wright-brothers_769/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/02/2e/022e8b81ba1405991401bb46d6330c73.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The White Queen (The Cousins\u0027 War #1)",
+ "price": 25.91,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-white-queen-the-cousins-war-1_768/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/72/d8/72d861617b6d3aababe6e61e8d3c1056.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Wedding Pact (The O\u0027Malleys #2)",
+ "price": 32.61,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-wedding-pact-the-omalleys-2_767/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7e/67/7e67addd80caaf8a9f9e9daa9cf66bb2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Time Keeper",
+ "price": 27.88,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-time-keeper_766/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8f/f8/8ff8680dde59ea739d6978a01e4d7fe5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Testament of Mary",
+ "price": 52.67,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-testament-of-mary_765/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/83/05/8305154438c91a02cefacf4ec8b53393.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Star-Touched Queen",
+ "price": 46.02,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-star-touched-queen_764/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/53/5e/535e2be0b423797c2cdc7d98882c820a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Songs of the Gods",
+ "price": 44.48,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-songs-of-the-gods_763/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6c/a3/6ca34db7c01e554ad17bd3be74b561e3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Song of Achilles",
+ "price": 37.4,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-song-of-achilles_762/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/66/f7/66f79b76d6c6b64fcc8110515c454e09.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Rosie Project (Don Tillman #1)",
+ "price": 54.04,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-rosie-project-don-tillman-1_761/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f0/db/f0db1cf76d45f0522d4c8c3c39aa0dd8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Power of Habit: Why We Do What We Do in Life and Business",
+ "price": 16.88,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-power-of-habit-why-we-do-what-we-do-in-life-and-business_760/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/52/df/52dfc44f48cf29e7a9e305bcb63e1899.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Marriage of Opposites",
+ "price": 28.08,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-marriage-of-opposites_759/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0f/c2/0fc21ec3489cb23116778ee84f425eca.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Lucifer Effect: Understanding How Good People Turn Evil",
+ "price": 10.4,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-lucifer-effect-understanding-how-good-people-turn-evil_758/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a6/c8/a6c8256b123493472591c5855c7de704.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Long Haul (Diary of a Wimpy Kid #9)",
+ "price": 44.07,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-long-haul-diary-of-a-wimpy-kid-9_757/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/46/bd/46bdee520b8136972262fd040533772d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Loney",
+ "price": 23.4,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-loney_756/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6d/10/6d10387a0175701d4ff456a0c7eee67b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Literature Book (Big Ideas Simply Explained)",
+ "price": 17.43,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-literature-book-big-ideas-simply-explained_755/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9e/ea/9eea51ac4a15d18aa976be459da30c47.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Last Mile (Amos Decker #2)",
+ "price": 54.21,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-last-mile-amos-decker-2_754/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/37/f1/37f118b4a56d866e1e8b563759d6966c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Immortal Life of Henrietta Lacks",
+ "price": 40.67,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-immortal-life-of-henrietta-lacks_753/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/94/ac/94ac87da7b40853013093f08356efa3b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Hidden Oracle (The Trials of Apollo #1)",
+ "price": 52.26,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-hidden-oracle-the-trials-of-apollo-1_752/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b4/67/b467a4f01ca6ae8464b9425a156c7c32.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Help Yourself Cookbook for Kids: 60 Easy Plant-Based Recipes Kids Can Make to Stay Healthy and Save the Earth",
+ "price": 28.77,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-help-yourself-cookbook-for-kids-60-easy-plant-based-recipes-kids-can-make-to-stay-healthy-and-save-the-earth_751/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c4/dc/c4dcec6f513eaca3f0f3c748d834c46d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Guilty (Will Robie #4)",
+ "price": 13.82,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-guilty-will-robie-4_750/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/76/de/76deee06ffe45e646c0113af01f4f401.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The First Hostage (J.B. Collins #2)",
+ "price": 25.85,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-first-hostage-jb-collins-2_749/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/38/34/3834572e651cdc14b18d348fa4875aa9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Dovekeepers",
+ "price": 48.78,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-dovekeepers_748/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8f/3f/8f3f4d67e30a8129577ccc4664998345.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Darkest Lie",
+ "price": 35.35,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-darkest-lie_747/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1d/3c/1d3c05b772ab846c111970232360d2c5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Bane Chronicles (The Bane Chronicles #1-11)",
+ "price": 44.73,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-bane-chronicles-the-bane-chronicles-1-11_746/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9a/33/9a333c4a06ce187c5c9d2f5969ddcac2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Bad-Ass Librarians of Timbuktu: And Their Race to Save the World’s Most Precious Manuscripts",
+ "price": 15.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-bad-ass-librarians-of-timbuktu-and-their-race-to-save-the-worlds-most-precious-manuscripts_745/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/88/90/8890073a9c9e3bb696f6baa84fb4dd95.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The 14th Colony (Cotton Malone #11)",
+ "price": 39.24,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-14th-colony-cotton-malone-11_744/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d9/1a/d91aae72af6c1cb2c63163acabe7895c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "That Darkness (Gardiner and Renner #1)",
+ "price": 13.92,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/that-darkness-gardiner-and-renner-1_743/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/44/9e/449ed681142bc336646abee754e96639.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Tastes Like Fear (DI Marnie Rome #3)",
+ "price": 10.69,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/tastes-like-fear-di-marnie-rome-3_742/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3c/91/3c91d97266bd6dda322089695fb46daf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Take Me with You",
+ "price": 45.21,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/take-me-with-you_741/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d8/a4/d8a44eda7cbe7bd1207f868e9adc06f3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Swell: A Year of Waves",
+ "price": 45.58,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/swell-a-year-of-waves_740/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/10/28/1028b2cf417e49dc1c14609e437a98e0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Superman Vol. 1: Before Truth (Superman by Gene Luen Yang #1)",
+ "price": 11.89,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/superman-vol-1-before-truth-superman-by-gene-luen-yang-1_739/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7e/c0/7ec0e9ca6153a23b2024b7df7407ee84.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Still Life with Bread Crumbs",
+ "price": 26.41,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/still-life-with-bread-crumbs_738/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8e/c7/8ec7f310b74ddd7ec3c859e9b0da7389.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Steve Jobs",
+ "price": 39.5,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/steve-jobs_737/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/86/31/86313c225719ac946894d780c4ff0839.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Sorting the Beef from the Bull: The Science of Food Fraud Forensics",
+ "price": 44.74,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/sorting-the-beef-from-the-bull-the-science-of-food-fraud-forensics_736/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/68/ca/68caaf9ac41964d5167a3eb67c638393.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Someone Like You (The Harrisons #2)",
+ "price": 52.79,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/someone-like-you-the-harrisons-2_735/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e3/d0/e3d05227f3fc24f0e0c84ccebe108fb0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "So Cute It Hurts!!, Vol. 6 (So Cute It Hurts!! #6)",
+ "price": 35.43,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/so-cute-it-hurts-vol-6-so-cute-it-hurts-6_734/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b2/48/b2484d13793ff1c4271a3d4023d4d24e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Shtum",
+ "price": 55.84,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/shtum_733/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/03/16/0316bb6f4785ac69c0643109201bad5d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "See America: A Celebration of Our National Parks \u0026 Treasured Sites",
+ "price": 48.87,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/see-america-a-celebration-of-our-national-parks-treasured-sites_732/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9a/7e/9a7e63f12829df4b43b31d110bf3dc2e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "salt.",
+ "price": 46.78,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/salt_731/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3f/41/3f4160ada0b16e3c64cd2d0dffe781c8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Robin War",
+ "price": 47.82,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/robin-war_730/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/45/1d/451d3543022242b8b245793e6b5c26bb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Red Hood/Arsenal, Vol. 1: Open for Business (Red Hood/Arsenal #1)",
+ "price": 25.48,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/red-hoodarsenal-vol-1-open-for-business-red-hoodarsenal-1_729/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/da/78/da78757466c3b0a2c89f0ddf6b5e642f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Rain Fish",
+ "price": 23.57,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/rain-fish_728/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bb/e2/bbe26db72b8a32117bfe4981b7cc8147.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Quarter Life Poetry: Poems for the Young, Broke and Hangry",
+ "price": 50.89,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/quarter-life-poetry-poems-for-the-young-broke-and-hangry_727/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c8/f2/c8f297fab080ddd02b3ed5c17b83af85.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Pet Sematary",
+ "price": 10.56,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/pet-sematary_726/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7a/72/7a72465b21dbf998323e37b31f9a3f4a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Overload: How to Unplug, Unwind, and Unleash Yourself from the Pressure of Stress",
+ "price": 52.15,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/overload-how-to-unplug-unwind-and-unleash-yourself-from-the-pressure-of-stress_725/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9c/da/9cda4893c7fce0c1c8eaa34fb092aa04.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Once Was a Time",
+ "price": 18.28,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/once-was-a-time_724/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/97/12/971212afa8e4ff49d92f678bc889d8b7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Old School (Diary of a Wimpy Kid #10)",
+ "price": 11.83,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/old-school-diary-of-a-wimpy-kid-10_723/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/df/5d/df5d172abe87deda6d533e3e908d27d8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "No Dream Is Too High: Life Lessons From a Man Who Walked on the Moon",
+ "price": 21.95,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/no-dream-is-too-high-life-lessons-from-a-man-who-walked-on-the-moon_722/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b5/6f/b56ff04effb66fe701a22abd4a7f1667.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Naruto (3-in-1 Edition), Vol. 14: Includes Vols. 40, 41 \u0026 42 (Naruto: Omnibus #14)",
+ "price": 38.39,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/naruto-3-in-1-edition-vol-14-includes-vols-40-41-42-naruto-omnibus-14_721/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c8/22/c822360ce0f91c40f7a0491c22287646.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "My Name Is Lucy Barton",
+ "price": 41.56,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/my-name-is-lucy-barton_720/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ca/b1/cab150e556b5fab663a9fec00ed97943.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "My Mrs. Brown",
+ "price": 24.48,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/my-mrs-brown_719/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e0/79/e07906c1e507055da9a2260a74f58273.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "My Kind of Crazy",
+ "price": 40.36,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/my-kind-of-crazy_718/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/46/6e/466e9636819aad1126ac6cefb5313ba8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Mr. Mercedes (Bill Hodges Trilogy #1)",
+ "price": 28.9,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/mr-mercedes-bill-hodges-trilogy-1_717/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a7/f0/a7f092a7b79f848df0226f808fed489b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "More Than Music (Chasing the Dream #1)",
+ "price": 37.61,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/more-than-music-chasing-the-dream-1_716/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3f/e7/3fe7073a5caac81929524d2d9488f928.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Made to Stick: Why Some Ideas Survive and Others Die",
+ "price": 38.85,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/made-to-stick-why-some-ideas-survive-and-others-die_715/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e2/2e/e22e4a82d97f9f0689d5295a98f5dcff.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Luis Paints the World",
+ "price": 53.95,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/luis-paints-the-world_714/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/85/e7/85e75d5a9309da5807c82decf3d90263.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Luckiest Girl Alive",
+ "price": 49.83,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/luckiest-girl-alive_713/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/81/c0/81c0a1ce03db82568e2496db945a8227.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Lowriders to the Center of the Earth (Lowriders in Space #2)",
+ "price": 51.51,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/lowriders-to-the-center-of-the-earth-lowriders-in-space-2_712/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b2/97/b2978e96069dd91785e5ab0bc99c022e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Love Is a Mix Tape (Music #1)",
+ "price": 18.03,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/love-is-a-mix-tape-music-1_711/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a2/6d/a26d8449abb3381e09126eda5f4e8151.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Looking for Lovely: Collecting the Moments that Matter",
+ "price": 29.14,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/looking-for-lovely-collecting-the-moments-that-matter_710/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/61/1e/611e1804ad968e309a5f788d4ebc1cb4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Living Leadership by Insight: A Good Leader Achieves, a Great Leader Builds Monuments",
+ "price": 46.91,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/living-leadership-by-insight-a-good-leader-achieves-a-great-leader-builds-monuments_709/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e9/5e/e95e82f09681709bb0f927341dda274e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Let It Out: A Journey Through Journaling",
+ "price": 26.79,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/let-it-out-a-journey-through-journaling_708/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/51/fc/51fcd3e9384894e6a53a753d2ab856ee.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Lady Midnight (The Dark Artifices #1)",
+ "price": 16.28,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/lady-midnight-the-dark-artifices-1_707/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/89/a6/89a61d48e93bc92537c0a2cb2c0094bb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "It\u0027s All Easy: Healthy, Delicious Weeknight Meals in under 30 Minutes",
+ "price": 19.55,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/its-all-easy-healthy-delicious-weeknight-meals-in-under-30-minutes_706/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fe/67/fe67c381d6a0c4c00a7c191d16939554.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Island of Dragons (Unwanteds #7)",
+ "price": 29.65,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/island-of-dragons-unwanteds-7_705/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/75/b9/75b99691594fde72ccb1831624cfeff6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "I Know What I\u0027m Doing -- and Other Lies I Tell Myself: Dispatches from a Life Under Construction",
+ "price": 25.98,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/i-know-what-im-doing-and-other-lies-i-tell-myself-dispatches-from-a-life-under-construction_704/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ea/7b/ea7bcac4b27a5bf6d4f8125bb7af3361.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "I Am Pilgrim (Pilgrim #1)",
+ "price": 10.6,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/i-am-pilgrim-pilgrim-1_703/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ed/07/ed07c9e7c53d4f33a6eb7d41eb0e6d4a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Hyperbole and a Half: Unfortunate Situations, Flawed Coping Mechanisms, Mayhem, and Other Things That Happened",
+ "price": 14.75,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/hyperbole-and-a-half-unfortunate-situations-flawed-coping-mechanisms-mayhem-and-other-things-that-happened_702/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b5/a9/b5a90d1c36a96513942f006345ace3d2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Hush, Hush (Hush, Hush #1)",
+ "price": 47.02,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/hush-hush-hush-hush-1_701/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2a/b9/2ab91479fe480e964f319fa8ac6991b2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Hold Your Breath (Search and Rescue #1)",
+ "price": 28.82,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/hold-your-breath-search-and-rescue-1_700/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0b/89/0b89c3b317d0f89da48356a0b5959c1e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Hamilton: The Revolution",
+ "price": 58.79,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/hamilton-the-revolution_699/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/34/ef/34ef0844cb1fbca6ab73444087fcf0e6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Greek Mythic History",
+ "price": 10.23,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/greek-mythic-history_698/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/36/cf/36cf56c7bdf35aadbcc6f05a8e8d8fcb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "God: The Most Unpleasant Character in All Fiction",
+ "price": 30.03,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/god-the-most-unpleasant-character-in-all-fiction_697/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1f/db/1fdb125bcb8cee71f3404b4dc293348c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Glory over Everything: Beyond The Kitchen House",
+ "price": 45.84,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/glory-over-everything-beyond-the-kitchen-house_696/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/96/41/964194a317f8ce5ed031bf4c9ceb43ab.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Feathers: Displays of Brilliant Plumage",
+ "price": 49.05,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/feathers-displays-of-brilliant-plumage_695/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f2/ee/f2ee668cf593ff13a9560c2801e9c2a2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Far \u0026 Away: Places on the Brink of Change: Seven Continents, Twenty-Five Years",
+ "price": 15.06,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/far-away-places-on-the-brink-of-change-seven-continents-twenty-five-years_694/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/11/e2/11e227bdb5fe8b43dcc2366a157a47c2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Every Last Word",
+ "price": 46.47,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/every-last-word_693/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/92/e7/92e7f0a8ca38964fea93e911aefbf6c9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Eligible (The Austen Project #4)",
+ "price": 27.09,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/eligible-the-austen-project-4_692/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/26/3b/263bf5d128bf18553ea8da8bb19e9a0c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "El Deafo",
+ "price": 57.62,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/el-deafo_691/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/34/eb/34eb0f1b570d4f1f6ad106652f1ac6ff.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Eight Hundred Grapes",
+ "price": 14.39,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/eight-hundred-grapes_690/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8c/01/8c011092f05791961d25ec3cfcf0a832.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Eaternity: More than 150 Deliciously Easy Vegan Recipes for a Long, Healthy, Satisfied, Joyful Life",
+ "price": 51.75,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/eaternity-more-than-150-deliciously-easy-vegan-recipes-for-a-long-healthy-satisfied-joyful-life_689/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b1/e1/b1e15eef42c0d71596f9f9ad4e9f48b0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Eat Fat, Get Thin",
+ "price": 54.07,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/eat-fat-get-thin_688/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/62/3f/623f8e7f7432ce744f4318aae8166ce4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Don\u0027t Get Caught",
+ "price": 55.35,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/dont-get-caught_687/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b2/df/b2df2ea409c5cf28538b67aff424b11f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Doctor Sleep (The Shining #2)",
+ "price": 40.12,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/doctor-sleep-the-shining-2_686/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/55/bf/55bfc858c1cb19867e41415532ae43c6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Demigods \u0026 Magicians: Percy and Annabeth Meet the Kanes (Percy Jackson \u0026 Kane Chronicles Crossover #1-3)",
+ "price": 37.51,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/demigods-magicians-percy-and-annabeth-meet-the-kanes-percy-jackson-kane-chronicles-crossover-1-3_685/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8f/80/8f8074d9f035c2a0ef8595ad89f7bcc8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Dear Mr. Knightley",
+ "price": 11.21,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/dear-mr-knightley_684/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/78/87/78873811f8c1d75a0c26d8cc8e6a9dbc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Daily Fantasy Sports",
+ "price": 36.58,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/daily-fantasy-sports_683/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/44/ff/44ff81a2ea37d3946605e205ddd538eb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Crazy Love: Overwhelmed by a Relentless God",
+ "price": 47.72,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/crazy-love-overwhelmed-by-a-relentless-god_682/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/03/f1/03f1e337afadba35687672b5625a9757.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Cometh the Hour (The Clifton Chronicles #6)",
+ "price": 25.01,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/cometh-the-hour-the-clifton-chronicles-6_681/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/55/11/5511a4296fbd484dcaa89c8a2d25965d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Code Name Verity (Code Name Verity #1)",
+ "price": 22.13,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/code-name-verity-code-name-verity-1_680/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f5/58/f55886d1bf600529a35e1bd932c78ca0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Clockwork Angel (The Infernal Devices #1)",
+ "price": 44.14,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/clockwork-angel-the-infernal-devices-1_679/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ff/0e/ff0ee0002f510112b6d7a88f53366e1d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "City of Glass (The Mortal Instruments #3)",
+ "price": 56.02,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/city-of-glass-the-mortal-instruments-3_678/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/00/08/0008e65aa431ed3625ad3a4352f8e90d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "City of Fallen Angels (The Mortal Instruments #4)",
+ "price": 11.23,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/city-of-fallen-angels-the-mortal-instruments-4_677/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c9/40/c940b6c329ecc39aaed2ab0140592a4b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "City of Bones (The Mortal Instruments #1)",
+ "price": 43.28,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/city-of-bones-the-mortal-instruments-1_676/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/96/af/96af4aaf25ab49b057c10b5b7eb7652c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "City of Ashes (The Mortal Instruments #2)",
+ "price": 47.27,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/city-of-ashes-the-mortal-instruments-2_675/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/68/da/68dab382d535305ca6025be9921df0d1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Cell",
+ "price": 20.29,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/cell_674/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0b/97/0b97282ed82b771ed328e05386a84adb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Catching Jordan (Hundred Oaks)",
+ "price": 50.83,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/catching-jordan-hundred-oaks_673/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ad/ac/adac97366586d261feab30bf5220756e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Carry On, Warrior: Thoughts on Life Unarmed",
+ "price": 31.85,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/carry-on-warrior-thoughts-on-life-unarmed_672/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/dd/f5/ddf5da673bb34a74a81faf7271c7ca13.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Carrie",
+ "price": 46.23,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/carrie_671/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c5/6f/c56f37eb53888765eb55f86fb7381c2f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Buying In: The Secret Dialogue Between What We Buy and Who We Are",
+ "price": 37.8,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/buying-in-the-secret-dialogue-between-what-we-buy-and-who-we-are_670/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f2/fa/f2faa289117546efa0b4068a07778ab0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Brain on Fire: My Month of Madness",
+ "price": 49.32,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/brain-on-fire-my-month-of-madness_669/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/88/aa/88aad1204951e0900906173b086e6695.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Batman: Europa",
+ "price": 32.01,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/batman-europa_668/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f1/fe/f1fecf0ce9b5771e4d2c9619e8550988.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Barefoot Contessa Back to Basics",
+ "price": 28.01,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/barefoot-contessa-back-to-basics_667/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b8/38/b838b65e0e1ac3a9b498dfb1bf004420.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Barefoot Contessa at Home: Everyday Recipes You\u0027ll Make Over and Over Again",
+ "price": 50.62,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/barefoot-contessa-at-home-everyday-recipes-youll-make-over-and-over-again_666/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/74/aa/74aa29b1ba4147eaf5b46671bf235861.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Balloon Animals",
+ "price": 17.03,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/balloon-animals_665/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6e/23/6e2324cae6335e8e98c8b46597afc9a3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Art Ops Vol. 1",
+ "price": 48.8,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/art-ops-vol-1_664/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0b/b4/0bb4c64f1522c033368df5567a349472.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Aristotle and Dante Discover the Secrets of the Universe (Aristotle and Dante Discover the Secrets of the Universe #1)",
+ "price": 58.14,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/aristotle-and-dante-discover-the-secrets-of-the-universe-aristotle-and-dante-discover-the-secrets-of-the-universe-1_663/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/61/1a/611aba0ef5b859ba1977ef30677b0194.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Angels Walking (Angels Walking #1)",
+ "price": 34.2,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/angels-walking-angels-walking-1_662/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/50/0e/500eeb810e940424827580574e46852c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Angels \u0026 Demons (Robert Langdon #1)",
+ "price": 51.48,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/angels-demons-robert-langdon-1_661/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b4/2a/b42a187c37de904f776070c57f51c756.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "All the Light We Cannot See",
+ "price": 29.87,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/all-the-light-we-cannot-see_660/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/41/c3/41c37f7f0e03ee1144dd6fa89483b5d9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Adulthood Is a Myth: A \"Sarah\u0027s Scribbles\" Collection",
+ "price": 10.9,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/adulthood-is-a-myth-a-sarahs-scribbles-collection_659/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a2/b9/a2b974e5a66e7502c77d2e4632abe033.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Abstract City",
+ "price": 56.37,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/abstract-city_658/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e7/70/e77019ebd71bcf6badb085bddf47c413.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "A Time of Torment (Charlie Parker #14)",
+ "price": 48.35,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-time-of-torment-charlie-parker-14_657/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e8/c0/e8c0ba15066bab950ae161fd60949b9a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "A Study in Scarlet (Sherlock Holmes #1)",
+ "price": 16.73,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/a-study-in-scarlet-sherlock-holmes-1_656/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8f/a4/8fa41d6caa10e427356b8a590eb4d96b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "A Series of Catastrophes and Miracles: A True Story of Love, Science, and Cancer",
+ "price": 56.48,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/a-series-of-catastrophes-and-miracles-a-true-story-of-love-science-and-cancer_655/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9b/20/9b2076ce7414103a093ce2459d089969.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "A People\u0027s History of the United States",
+ "price": 40.79,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/a-peoples-history-of-the-united-states_654/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/75/20/75200336c141156746000f7055df344a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "A Man Called Ove",
+ "price": 39.72,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-man-called-ove_653/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9c/f1/9cf1f4a47b8d08909fc092e6ae598d83.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "A Distant Mirror: The Calamitous 14th Century",
+ "price": 14.58,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/a-distant-mirror-the-calamitous-14th-century_652/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/41/d5/41d5fa6a81cdbcbe6b0b15757a4c9144.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "A Brush of Wings (Angels Walking #3)",
+ "price": 55.51,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-brush-of-wings-angels-walking-3_651/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4d/16/4d163d43cb4aa624e599330a39abace5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "1491: New Revelations of the Americas Before Columbus",
+ "price": 21.8,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/1491-new-revelations-of-the-americas-before-columbus_650/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/88/75/8875f384ce9103281b7f6e86a2b8204d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Three Searches, Meaning, and the Story",
+ "price": 13.33,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-three-searches-meaning-and-the-story_649/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/83/35/8335b71599b5a257a56cfabdd79080a4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Searching for Meaning in Gailana",
+ "price": 38.73,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/searching-for-meaning-in-gailana_648/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3b/04/3b045fe0394dc192950a0ec9e3812fe4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Rook",
+ "price": 37.86,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/rook_647/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/55/33/5533595a623c3bb947c4a5171fc2df08.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "My Kitchen Year: 136 Recipes That Saved My Life",
+ "price": 11.53,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/my-kitchen-year-136-recipes-that-saved-my-life_646/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/76/a1/76a1516c8d9c3e620626f30840013a85.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "13 Hours: The Inside Account of What Really Happened In Benghazi",
+ "price": 27.06,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/13-hours-the-inside-account-of-what-really-happened-in-benghazi_645/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/15/f7/15f78e0b04feb9b94e88865803cb5e9e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Will You Won\u0027t You Want Me?",
+ "price": 13.86,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/will-you-wont-you-want-me_644/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/16/e3/16e3ca741956485119251e7442a67e2e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Tipping Point for Planet Earth: How Close Are We to the Edge?",
+ "price": 37.55,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/tipping-point-for-planet-earth-how-close-are-we-to-the-edge_643/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/56/97/5697f2f8f628129df01c5790985ffd9b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Star-Touched Queen",
+ "price": 32.3,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-star-touched-queen_642/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d3/0d/d30dd8b6be6f9fcfd17178e8083238b6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Silent Sister (Riley MacPherson #1)",
+ "price": 46.29,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-silent-sister-riley-macpherson-1_641/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/30/2c/302cd9c84442e139145ec0993880d7e0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Midnight Watch: A Novel of the Titanic and the Californian",
+ "price": 26.2,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-midnight-watch-a-novel-of-the-titanic-and-the-californian_640/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/97/3a/973a2c3462a18fc90d3b9662d959df37.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Lonely City: Adventures in the Art of Being Alone",
+ "price": 33.26,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-lonely-city-adventures-in-the-art-of-being-alone_639/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5c/5e/5c5e527fea6b17199773bb175b515aee.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Gray Rhino: How to Recognize and Act on the Obvious Dangers We Ignore",
+ "price": 59.15,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-gray-rhino-how-to-recognize-and-act-on-the-obvious-dangers-we-ignore_638/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9f/25/9f255826f354776dda9afbd5576a7add.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Golden Condom: And Other Essays on Love Lost and Found",
+ "price": 39.43,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-golden-condom-and-other-essays-on-love-lost-and-found_637/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/dc/4d/dc4d070e33813a07a4e02f069e6d482f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Epidemic (The Program 0.6)",
+ "price": 14.44,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-epidemic-the-program-06_636/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/87/cd/87cd652c35e2a78535c83becae33cff2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Dinner Party",
+ "price": 56.54,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-dinner-party_635/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ba/76/ba761d23c5c0e5a0638e04739c69c5d0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Diary of a Young Girl",
+ "price": 59.9,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-diary-of-a-young-girl_634/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/83/d5/83d5526864a108d27fd4b03dd31ec18b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Children",
+ "price": 11.88,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-children_633/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d8/03/d803ab341d3020a3bb280d6135e4ae65.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Stars Above (The Lunar Chronicles #4.5)",
+ "price": 48.05,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/stars-above-the-lunar-chronicles-45_632/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fd/5b/fd5b14399052ab552e240ed18ab03c6d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Snatched: How A Drug Queen Went Undercover for the DEA and Was Kidnapped By Colombian Guerillas",
+ "price": 21.21,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/snatched-how-a-drug-queen-went-undercover-for-the-dea-and-was-kidnapped-by-colombian-guerillas_631/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2a/f3/2af39796852729270fb23e05a662a42c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Raspberry Pi Electronics Projects for the Evil Genius",
+ "price": 49.67,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/raspberry-pi-electronics-projects-for-the-evil-genius_630/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a2/da/a2da8957b9cb8265d7f1dfeb0651f1c7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Quench Your Own Thirst: Business Lessons Learned Over a Beer or Two",
+ "price": 43.14,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/quench-your-own-thirst-business-lessons-learned-over-a-beer-or-two_629/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2d/fd/2dfdc52bcdbd82dee50372bc46c83e15.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Psycho: Sanitarium (Psycho #1.5)",
+ "price": 36.97,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/psycho-sanitarium-psycho-15_628/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/02/5c/025c30a378e2a4190e84f1429e81b803.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Poisonous (Max Revere Novels #3)",
+ "price": 26.8,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/poisonous-max-revere-novels-3_627/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/23/52/2352718971d5e166fa9541a5a7d716fa.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "One with You (Crossfire #5)",
+ "price": 15.71,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/one-with-you-crossfire-5_626/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b8/29/b829181ae95c8f020c1ad3273192de30.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "No Love Allowed (Dodge Cove #1)",
+ "price": 54.65,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/no-love-allowed-dodge-cove-1_625/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/70/3e/703e053877204a396ec6e7beac863118.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Murder at the 42nd Street Library (Raymond Ambler #1)",
+ "price": 54.36,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/murder-at-the-42nd-street-library-raymond-ambler-1_624/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c3/8d/c38d65cd155b67ca025f0655bd1bb095.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Most Wanted",
+ "price": 35.28,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/most-wanted_623/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8b/bc/8bbc5ab4c3784b4d9b93eb0fd1fb6fd6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Love, Lies and Spies",
+ "price": 20.55,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/love-lies-and-spies_622/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7a/22/7a224a6e174af91950e9b124afe54e0e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "How to Speak Golf: An Illustrated Guide to Links Lingo",
+ "price": 58.32,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/how-to-speak-golf-an-illustrated-guide-to-links-lingo_621/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d2/64/d264ad1af882ce391005dc7215ac90e7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Hide Away (Eve Duncan #20)",
+ "price": 11.84,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/hide-away-eve-duncan-20_620/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/57/07/5707c3d5d4fd44d943d51730ba7d429a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Furiously Happy: A Funny Book About Horrible Things",
+ "price": 41.46,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/furiously-happy-a-funny-book-about-horrible-things_619/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ab/2a/ab2ae4f02aa46271b4bfc77494039fc6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Everyday Italian: 125 Simple and Delicious Recipes",
+ "price": 20.1,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/everyday-italian-125-simple-and-delicious-recipes_618/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5a/64/5a6499d41ccaad4c4f7eeaa90e16345a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Equal Is Unfair: America\u0027s Misguided Fight Against Income Inequality",
+ "price": 56.86,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/equal-is-unfair-americas-misguided-fight-against-income-inequality_617/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/00/11/001153d2a22d889837efac1703e10a5e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Eleanor \u0026 Park",
+ "price": 56.51,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/eleanor-park_616/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ed/d7/edd781d3c9d63a395f80f241445e88fa.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Dirty (Dive Bar #1)",
+ "price": 40.83,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/dirty-dive-bar-1_615/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ae/90/ae903f6f6d059954be4e85497dd76bf5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Can You Keep a Secret? (Fear Street Relaunch #4)",
+ "price": 48.64,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/can-you-keep-a-secret-fear-street-relaunch-4_614/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0b/2f/0b2f432cc27132f688fcdf29618521e0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Boar Island (Anna Pigeon #19)",
+ "price": 59.48,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/boar-island-anna-pigeon-19_613/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d5/81/d58157866ea8f015a8e4c55b23b8c96f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "A Paris Apartment",
+ "price": 39.01,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/a-paris-apartment_612/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/16/57/16575316618bd7e922d5b0e0f87de2ca.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "A la Mode: 120 Recipes in 60 Pairings: Pies, Tarts, Cakes, Crisps, and More Topped with Ice Cream, Gelato, Frozen Custard, and More",
+ "price": 38.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-la-mode-120-recipes-in-60-pairings-pies-tarts-cakes-crisps-and-more-topped-with-ice-cream-gelato-frozen-custard-and-more_611/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/98/19/9819ff3a8290dc6ab8797d00de5ec554.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Troublemaker: Surviving Hollywood and Scientology",
+ "price": 48.39,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/troublemaker-surviving-hollywood-and-scientology_610/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/77/82/778285b3c87d6d5d98003aa0f2f65933.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Widow",
+ "price": 27.26,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-widow_609/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fd/71/fd71fb07247bf911505a351c0670c6dc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Sleep Revolution: Transforming Your Life, One Night at a Time",
+ "price": 11.68,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-sleep-revolution-transforming-your-life-one-night-at-a-time_608/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3d/c5/3dc5455313710cf7055c060114e25bf0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Improbability of Love",
+ "price": 59.45,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-improbability-of-love_607/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/06/49/06493269f6893cfd24b650f66df51882.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Art of Startup Fundraising",
+ "price": 21.0,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-art-of-startup-fundraising_606/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b3/7b/b37be83183f1dcb759d92bda8f8998a4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Take Me Home Tonight (Rock Star Romance #3)",
+ "price": 53.98,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/take-me-home-tonight-rock-star-romance-3_605/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a6/4b/a64b3c559f59748bfdbbe75be3e16075.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Sleeping Giants (Themis Files #1)",
+ "price": 48.74,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/sleeping-giants-themis-files-1_604/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c0/72/c072c1ef144d571abd25fe9cc18cceba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Setting the World on Fire: The Brief, Astonishing Life of St. Catherine of Siena",
+ "price": 21.15,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/setting-the-world-on-fire-the-brief-astonishing-life-of-st-catherine-of-siena_603/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8b/c4/8bc43a6b42d0283ab4bf611f1b497126.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Playing with Fire",
+ "price": 13.71,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/playing-with-fire_602/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/90/0b/900bd2e60d56b6480a4e8eb2dddb46d6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Off the Hook (Fishing for Trouble #1)",
+ "price": 47.67,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/off-the-hook-fishing-for-trouble-1_601/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1d/78/1d78fe226e1adb9cb591fa21f8a9bf68.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Mothering Sunday",
+ "price": 13.34,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/mothering-sunday_600/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a8/84/a8843a3fe1a40d5c7df60bbb8cd76ecd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Mother, Can You Not?",
+ "price": 16.89,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/mother-can-you-not_599/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ae/03/ae03f5d4d4c2ee038ac4c4ce9b71e592.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "M Train",
+ "price": 27.18,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/m-train_598/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d6/e8/d6e8258cee98f80727e99f7ac5aa1b88.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Lilac Girls",
+ "price": 17.28,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/lilac-girls_597/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6c/2e/6c2e764e3ea89859b52df8de4f12af7a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Lies and Other Acts of Love",
+ "price": 45.14,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/lies-and-other-acts-of-love_596/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/29/88/2988f5fb3dfd95214dba2ecb2d496c94.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Lab Girl",
+ "price": 40.85,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/lab-girl_595/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e9/72/e972f8b4abaaa6f8f449479cd9d87be3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Keep Me Posted",
+ "price": 20.46,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/keep-me-posted_594/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ae/ac/aeac003461b89c7ef826251d940b2afc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "It Didn\u0027t Start with You: How Inherited Family Trauma Shapes Who We Are and How to End the Cycle",
+ "price": 56.27,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/it-didnt-start-with-you-how-inherited-family-trauma-shapes-who-we-are-and-how-to-end-the-cycle_593/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ee/a9/eea9e831f8964b4dc0190c84a1f9a1f6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Grey (Fifty Shades #4)",
+ "price": 48.49,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/grey-fifty-shades-4_592/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bb/ee/bbeeab4c4ce572c0e9764e3a96c6d4a5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Exit, Pursued by a Bear",
+ "price": 51.34,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/exit-pursued-by-a-bear_591/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ca/99/ca99bafb2a75d4fadb8d64efed26316f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Daredevils",
+ "price": 16.34,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/daredevils_590/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/31/71/31715c5e3b53bf1e2f41e394f024a8c4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Cravings: Recipes for What You Want to Eat",
+ "price": 20.5,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/cravings-recipes-for-what-you-want-to-eat_589/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ae/5c/ae5ca435fb095e374d2c2aa9f7b6f380.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Born for This: How to Find the Work You Were Meant to Do",
+ "price": 21.59,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/born-for-this-how-to-find-the-work-you-were-meant-to-do_588/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/aa/67/aa677a97ecdcbbde7471f1c90ed0cf6f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Arena",
+ "price": 21.36,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/arena_587/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/51/88/518810d182843244a404f2a2a614a93b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Adultery",
+ "price": 20.88,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/adultery_586/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/79/d9/79d99cfa5557be0643ba00bfcd35256b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "A Mother\u0027s Reckoning: Living in the Aftermath of Tragedy",
+ "price": 19.53,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/a-mothers-reckoning-living-in-the-aftermath-of-tragedy_585/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/28/58/285861a80930ffa7521dcb8bd19656e9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "A Gentleman\u0027s Position (Society of Gentlemen #3)",
+ "price": 14.75,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-gentlemans-position-society-of-gentlemen-3_584/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f0/e0/f0e0db3edcb14293a52b51929cc72979.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "11/22/63",
+ "price": 48.48,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/112263_583/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f6/c5/f6c5d27eacb123238f28a32263694d74.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "10% Happier: How I Tamed the Voice in My Head, Reduced Stress Without Losing My Edge, and Found Self-Help That Actually Works",
+ "price": 24.57,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/10-happier-how-i-tamed-the-voice-in-my-head-reduced-stress-without-losing-my-edge-and-found-self-help-that-actually-works_582/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/40/b2/40b246cf12df5345dc0371c040fddb4b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "10-Day Green Smoothie Cleanse: Lose Up to 15 Pounds in 10 Days!",
+ "price": 49.71,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/10-day-green-smoothie-cleanse-lose-up-to-15-pounds-in-10-days_581/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/23/c2/23c2108ae81327c7f3fb0721976cba5e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Without Shame",
+ "price": 48.27,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/without-shame_580/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/90/86/9086ca3d1d5c4059beb7dcf762926e1e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Watchmen",
+ "price": 58.05,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/watchmen_579/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0b/43/0b43137f35134bf211608d1e7197b086.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Unlimited Intuition Now",
+ "price": 58.87,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/unlimited-intuition-now_578/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/61/46/6146f9ffb87a4f82301d033aa74cc48b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Underlying Notes",
+ "price": 11.82,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/underlying-notes_577/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ee/59/ee593e57a7fb110d96f1688b0fdd9d59.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Shack",
+ "price": 28.03,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-shack_576/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/20/8b/208b77faac57115ae239391fe2a64c86.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The New Brand You: Your New Image Makes the Sale for You",
+ "price": 44.05,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-new-brand-you-your-new-image-makes-the-sale-for-you_575/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9b/33/9b33c7a5431415614f7b788e0c1552c9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Moosewood Cookbook: Recipes from Moosewood Restaurant, Ithaca, New York",
+ "price": 12.34,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-moosewood-cookbook-recipes-from-moosewood-restaurant-ithaca-new-york_574/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d4/53/d453cfb6c08dbf76d200ffa858bc9979.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Flowers Lied",
+ "price": 16.68,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-flowers-lied_573/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a9/f0/a9f00f8505431e64db0f91df762a6d73.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Fabric of the Cosmos: Space, Time, and the Texture of Reality",
+ "price": 55.91,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-fabric-of-the-cosmos-space-time-and-the-texture-of-reality_572/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5e/7f/5e7f7d9913d4c95d33904770c518d537.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Book of Mormon",
+ "price": 24.57,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-book-of-mormon_571/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/83/db/83dbf86eb0fed1d99de2148eac4eb064.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Art and Science of Low Carbohydrate Living",
+ "price": 52.98,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-art-and-science-of-low-carbohydrate-living_570/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4b/d4/4bd43108fb070ad8ebba9cdb00b14069.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Alien Club",
+ "price": 54.4,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-alien-club_569/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/93/d0/93d01bc6bce58e8efbf560e9e3dc3379.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Suzie Snowflake: One beautiful flake (a self-esteem story)",
+ "price": 54.81,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/suzie-snowflake-one-beautiful-flake-a-self-esteem-story_568/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/db/cc/dbcc9d63b73ce9058d53f36465dbe2b2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Nap-a-Roo",
+ "price": 25.08,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/nap-a-roo_567/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/27/1f/271faa1d7561473974d12803feb1f0a1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "NaNo What Now? Finding your editing process, revising your NaNoWriMo book and building a writing career through publishing and beyond",
+ "price": 10.41,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/nano-what-now-finding-your-editing-process-revising-your-nanowrimo-book-and-building-a-writing-career-through-publishing-and-beyond_566/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f3/b9/f3b94d63844537271e86565071e5d716.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Modern Day Fables",
+ "price": 47.44,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/modern-day-fables_565/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/79/40/79405be1357e2576e7f4b307600be914.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "If I Gave You God\u0027s Phone Number....: Searching for Spirituality in America",
+ "price": 20.91,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/if-i-gave-you-gods-phone-number-searching-for-spirituality-in-america_564/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/87/fe/87fe3f7f3f62c1b1b81890578c9cf294.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Fruits Basket, Vol. 9 (Fruits Basket #9)",
+ "price": 33.95,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/fruits-basket-vol-9-fruits-basket-9_563/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7c/ea/7cea6ff4f6f1427739b136db35fbfad4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Dress Your Family in Corduroy and Denim",
+ "price": 43.68,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/dress-your-family-in-corduroy-and-denim_562/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/df/14/df1418baa09e00b877be35066084c9dc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Don\u0027t Forget Steven",
+ "price": 33.23,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/dont-forget-steven_561/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e7/75/e775bf9ea6343b2ee0be5166bb445bd2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Chernobyl 01:23:40: The Incredible True Story of the World\u0027s Worst Nuclear Disaster",
+ "price": 35.92,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/chernobyl-012340-the-incredible-true-story-of-the-worlds-worst-nuclear-disaster_560/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5e/76/5e76a5026bd17a5b484ae2a60eec0542.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Art and Fear: Observations on the Perils (and Rewards) of Artmaking",
+ "price": 48.63,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/art-and-fear-observations-on-the-perils-and-rewards-of-artmaking_559/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ef/80/ef80e6100214c486562a73ce76444826.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "A Shard of Ice (The Black Symphony Saga #1)",
+ "price": 56.63,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/a-shard-of-ice-the-black-symphony-saga-1_558/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/27/64/27649cb5da52970f4bb2fc5234a48578.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "A Hero\u0027s Curse (The Unseen Chronicles #1)",
+ "price": 50.49,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/a-heros-curse-the-unseen-chronicles-1_557/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/95/68/95685fabe00befa6dc91277cde703b55.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "23 Degrees South: A Tropical Tale of Changing Whether...",
+ "price": 35.79,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/23-degrees-south-a-tropical-tale-of-changing-whether_556/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/29/3e/293e31894cd2c5bf2aff452b8c818b66.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Zero to One: Notes on Startups, or How to Build the Future",
+ "price": 34.06,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/zero-to-one-notes-on-startups-or-how-to-build-the-future_555/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f4/8e/f48ee738bc992a68d08eadcb4338a547.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Why Not Me?",
+ "price": 17.76,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/why-not-me_554/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/31/a6/31a61c2587add91e55a85fec33e93d15.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "When Breath Becomes Air",
+ "price": 39.36,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/when-breath-becomes-air_553/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/39/a5/39a5f0d3280010ca400eb4f5d262b950.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Vagabonding: An Uncommon Guide to the Art of Long-Term World Travel",
+ "price": 36.94,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/vagabonding-an-uncommon-guide-to-the-art-of-long-term-world-travel_552/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d5/bf/d5bf0090470b0b8ea46d9c166f7895aa.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Unlikely Pilgrimage of Harold Fry (Harold Fry #1)",
+ "price": 43.62,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-unlikely-pilgrimage-of-harold-fry-harold-fry-1_551/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/06/e2/06e2e125d332e2e09a64816ff915b859.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The New Drawing on the Right Side of the Brain",
+ "price": 43.02,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-new-drawing-on-the-right-side-of-the-brain_550/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6a/55/6a55ccd4bc2383f5fe915fbef8bd5a23.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Midnight Assassin: Panic, Scandal, and the Hunt for America\u0027s First Serial Killer",
+ "price": 28.45,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-midnight-assassin-panic-scandal-and-the-hunt-for-americas-first-serial-killer_549/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/82/6c/826c590f552ce717a2972649350c8030.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Martian (The Martian #1)",
+ "price": 41.39,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-martian-the-martian-1_548/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/72/ed/72ed6908c3fcf2bccf79013a65943849.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The High Mountains of Portugal",
+ "price": 51.15,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-high-mountains-of-portugal_547/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/55/00/550091fc134bbe67f562d95a6d6313f7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Grownup",
+ "price": 35.88,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-grownup_546/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f4/cb/f4cb1f9c7280bf1fd05fe33d2816080f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The E-Myth Revisited: Why Most Small Businesses Don\u0027t Work and What to Do About It",
+ "price": 36.91,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-e-myth-revisited-why-most-small-businesses-dont-work-and-what-to-do-about-it_545/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/11/2c/112c55a6bcd401c3bd603f5ddb2e6b82.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "South of Sunshine",
+ "price": 28.93,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/south-of-sunshine_544/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/09/11/09118b974f3685483f3e4debd1f97c90.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Smarter Faster Better: The Secrets of Being Productive in Life and Business",
+ "price": 38.89,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/smarter-faster-better-the-secrets-of-being-productive-in-life-and-business_543/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/21/88/21889b1eddaec853b02a41bdd06eef54.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Silence in the Dark (Logan Point #4)",
+ "price": 58.33,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/silence-in-the-dark-logan-point-4_542/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bb/1c/bb1c91883579f1f99fe6ebf13b92c1c1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Shadows of the Past (Logan Point #1)",
+ "price": 39.67,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/shadows-of-the-past-logan-point-1_541/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/93/e0/93e0ec623673a8f83598c9aa7b6c94ec.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Roller Girl",
+ "price": 14.1,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/roller-girl_540/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b8/bd/b8bd3e5bc547c7c851689a844c9db429.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Rising Strong",
+ "price": 21.82,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/rising-strong_539/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3b/f3/3bf3c719382c03984ab9766803bed964.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Proofs of God: Classical Arguments from Tertullian to Barth",
+ "price": 54.21,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/proofs-of-god-classical-arguments-from-tertullian-to-barth_538/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3f/ef/3fef12d9da503693af12997c0ea0897f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Please Kill Me: The Uncensored Oral History of Punk",
+ "price": 31.19,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/please-kill-me-the-uncensored-oral-history-of-punk_537/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/06/f1/06f185c0be2ad6e2fe059464c03f1b47.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Out of Print: City Lights Spotlight No. 14",
+ "price": 53.64,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/out-of-print-city-lights-spotlight-no-14_536/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/93/d5/93d5c64abfad9ed6a0cb2e26f19f1a1e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "My Life Next Door (My Life Next Door )",
+ "price": 36.39,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/my-life-next-door-my-life-next-door_535/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/98/00/98001a78a78ab77027145ff586d64431.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Miller\u0027s Valley",
+ "price": 58.54,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/millers-valley_534/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/dc/1a/dc1a54201eff16a11e7d84eef5ea36c7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Man\u0027s Search for Meaning",
+ "price": 29.48,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/mans-search-for-meaning_533/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ed/ff/edffa2eec8d96b8ddcd53d5c2eff8453.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Love That Boy: What Two Presidents, Eight Road Trips, and My Son Taught Me About a Parent\u0027s Expectations",
+ "price": 25.06,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/love-that-boy-what-two-presidents-eight-road-trips-and-my-son-taught-me-about-a-parents-expectations_532/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6d/1b/6d1b236549b8d5bc9e20786a25b7e7d1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Living Forward: A Proven Plan to Stop Drifting and Get the Life You Want",
+ "price": 12.55,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/living-forward-a-proven-plan-to-stop-drifting-and-get-the-life-you-want_531/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c9/76/c9767187068d80827d0967225ce3925d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Les Fleurs du Mal",
+ "price": 29.04,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/les-fleurs-du-mal_530/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/36/5b/365b3ab7ab72a6258873716aef6d5c1a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Left Behind (Left Behind #1)",
+ "price": 40.72,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/left-behind-left-behind-1_529/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d7/e2/d7e27f418884548ee1b551c67bcd222c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Kill \u0027Em and Leave: Searching for James Brown and the American Soul",
+ "price": 45.05,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/kill-em-and-leave-searching-for-james-brown-and-the-american-soul_528/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/85/42/8542841f5644a6daf433504f1e106e97.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Kierkegaard: A Christian Missionary to Christians",
+ "price": 47.13,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/kierkegaard-a-christian-missionary-to-christians_527/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/05/ce/05ce699eaf78c0fae20308497c4f496a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "John Vassos: Industrial Design for Modern Life",
+ "price": 20.22,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/john-vassos-industrial-design-for-modern-life_526/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/85/a1/85a19d4c20a4801013e8108a166d10af.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "I\u0027ll Give You the Sun",
+ "price": 56.48,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/ill-give-you-the-sun_525/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/af/93/af933f86038dc55487b5bf1d81ff4bfb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "I Will Find You",
+ "price": 44.21,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/i-will-find-you_524/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/87/28/8728f8880e95b848021f6a9b3dcd07ca.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Hystopia: A Novel",
+ "price": 21.96,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/hystopia-a-novel_523/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2d/7b/2d7b77d8b45b2f8e1bc0ce20aacddad0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Howl and Other Poems",
+ "price": 40.45,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/howl-and-other-poems_522/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b7/29/b7293f602efb0c17e305077f8175888a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "History of Beauty",
+ "price": 10.29,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/history-of-beauty_521/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/58/a6/58a634c3231b5380544cc330536cb5ea.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Heaven is for Real: A Little Boy\u0027s Astounding Story of His Trip to Heaven and Back",
+ "price": 52.86,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/heaven-is-for-real-a-little-boys-astounding-story-of-his-trip-to-heaven-and-back_520/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/58/6a/586afa8809f59bff51b89b2bc4a16129.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Future Shock (Future Shock #1)",
+ "price": 55.65,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/future-shock-future-shock-1_519/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/89/10/8910c36eec96636288a9cfb61610c9fa.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Ender\u0027s Game (The Ender Quintet #1)",
+ "price": 43.64,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/enders-game-the-ender-quintet-1_518/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8a/0d/8a0d251ccece436f956df676c99e70f7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Diary of a Citizen Scientist: Chasing Tiger Beetles and Other New Ways of Engaging the World",
+ "price": 28.41,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/diary-of-a-citizen-scientist-chasing-tiger-beetles-and-other-new-ways-of-engaging-the-world_517/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/33/4f/334fd0ebdf0c0192baf5914d199c53b5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Death by Leisure: A Cautionary Tale",
+ "price": 37.51,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/death-by-leisure-a-cautionary-tale_516/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7d/16/7d16c126f85826628bf9dcccd7a66b32.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Brilliant Beacons: A History of the American Lighthouse",
+ "price": 11.45,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/brilliant-beacons-a-history-of-the-american-lighthouse_515/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/56/cb/56cb66d73fb438d64af14dce8bd8b22b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Brazen: The Courage to Find the You That\u0027s Been Hiding",
+ "price": 19.22,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/brazen-the-courage-to-find-the-you-thats-been-hiding_514/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3a/4f/3a4fb30cfc5742f4726bc9f807b66cda.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Between the World and Me",
+ "price": 56.91,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/between-the-world-and-me_513/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/73/45/7345c412c4c821f131d3c159e027c3a0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Being Mortal: Medicine and What Matters in the End",
+ "price": 55.06,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/being-mortal-medicine-and-what-matters-in-the-end_512/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c7/7f/c77fdad22e40b8b923ec6c5b1f5a740f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "A Murder Over a Girl: Justice, Gender, Junior High",
+ "price": 13.2,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/a-murder-over-a-girl-justice-gender-junior-high_511/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/56/31/56313728d302c83f2a8c70fba635ce33.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "32 Yolks",
+ "price": 53.63,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/32-yolks_510/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1d/1f/1d1fbd89f0290275b9166877663ee9f5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "\"Most Blessed of the Patriarchs\": Thomas Jefferson and the Empire of the Imagination",
+ "price": 44.48,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/most-blessed-of-the-patriarchs-thomas-jefferson-and-the-empire-of-the-imagination_509/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/11/af/11af7fbd6aec06a75fe207fae92b17e0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "You Are a Badass: How to Stop Doubting Your Greatness and Start Living an Awesome Life",
+ "price": 12.08,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/you-are-a-badass-how-to-stop-doubting-your-greatness-and-start-living-an-awesome-life_508/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9e/15/9e15d7add5090ff2a17bd71ac96aa55a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Wildlife of New York: A Five-Borough Coloring Book",
+ "price": 22.14,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/wildlife-of-new-york-a-five-borough-coloring-book_507/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0c/07/0c07b114195b45c156f7f1e23820c49a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "What Happened on Beale Street (Secrets of the South Mysteries #2)",
+ "price": 25.37,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/what-happened-on-beale-street-secrets-of-the-south-mysteries-2_506/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c7/ab/c7abb5e32bd37118a87523dcee0a70a6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Unreasonable Hope: Finding Faith in the God Who Brings Purpose to Your Pain",
+ "price": 46.33,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/unreasonable-hope-finding-faith-in-the-god-who-brings-purpose-to-your-pain_505/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8b/10/8b102daec94d1ea9c6fc36dd3ec1c1fe.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Under the Tuscan Sun",
+ "price": 37.33,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/under-the-tuscan-sun_504/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/98/c2/98c2e95c5fd1a4e7cd5f2b63c52826cb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Toddlers Are A**holes: It\u0027s Not Your Fault",
+ "price": 25.55,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/toddlers-are-aholes-its-not-your-fault_503/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4c/30/4c3041def6f29659e009f61e45e492b0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Year of Living Biblically: One Man\u0027s Humble Quest to Follow the Bible as Literally as Possible",
+ "price": 34.72,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-year-of-living-biblically-one-mans-humble-quest-to-follow-the-bible-as-literally-as-possible_502/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8e/43/8e4335b369bdad5ccc1551e5592f89ac.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Whale",
+ "price": 35.96,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-whale_501/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6c/18/6c18ea03e294bfcfe07cf531c6c5f5b3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Story of Art",
+ "price": 41.14,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-story-of-art_500/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bb/36/bb364a10868756d1c0877c928b43b533.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Origin of Species",
+ "price": 10.01,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-origin-of-species_499/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/da/0d/da0d13699a090516502257a4d7da623f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Great Gatsby",
+ "price": 36.05,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-great-gatsby_498/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/28/cb/28cb7a5e23c1339a0d6aafd5e7e190d6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Good Girl",
+ "price": 49.03,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-good-girl_497/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e2/71/e2718be90a081b33d2606a386b073998.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Glass Castle",
+ "price": 16.24,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-glass-castle_496/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e0/e9/e0e97d416322d9728df7d9e589d6a998.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Faith of Christopher Hitchens: The Restless Soul of the World\u0027s Most Notorious Atheist",
+ "price": 39.55,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-faith-of-christopher-hitchens-the-restless-soul-of-the-worlds-most-notorious-atheist_495/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cc/a4/cca4e6a4cd5c207e7ce7d992ff464c3b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Drowning Girls",
+ "price": 35.67,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-drowning-girls_494/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f5/d9/f5d90537f3bed5ad7c8971190beb0730.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Constant Princess (The Tudor Court #1)",
+ "price": 16.62,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-constant-princess-the-tudor-court-1_493/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fc/80/fc80b999ff4b8ef24b7071f62d2bf6d1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Bourne Identity (Jason Bourne #1)",
+ "price": 42.78,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-bourne-identity-jason-bourne-1_492/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/40/8d/408d93b27ce8c9cfb3bf66c17e9a54ab.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Bachelor Girl\u0027s Guide to Murder (Herringford and Watts Mysteries #1)",
+ "price": 52.3,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-bachelor-girls-guide-to-murder-herringford-and-watts-mysteries-1_491/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/95/d7/95d7541679fcbd579b8a4f2b47231aaf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Art Book",
+ "price": 32.34,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-art-book_490/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/99/51/99511f4da1a4a2114e2ed12e6ba17b65.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change",
+ "price": 33.17,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-7-habits-of-highly-effective-people-powerful-lessons-in-personal-change_489/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c9/c3/c9c3d568ff6ddb98bde01c9d0b1d920a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Team of Rivals: The Political Genius of Abraham Lincoln",
+ "price": 20.12,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/team-of-rivals-the-political-genius-of-abraham-lincoln_488/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/56/75/567575381760b5c1ec018d10d350fc5f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Steal Like an Artist: 10 Things Nobody Told You About Being Creative",
+ "price": 20.9,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/steal-like-an-artist-10-things-nobody-told-you-about-being-creative_487/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5f/17/5f17f0e06d7d67717eff3833d309a233.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Sit, Stay, Love",
+ "price": 20.9,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/sit-stay-love_486/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8e/40/8e408552c2e7ee81cd60c03c79f604af.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Sister Dear",
+ "price": 40.2,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/sister-dear_485/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fa/57/fa570b7a0fb42252f61e1e750c79d417.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Shrunken Treasures: Literary Classics, Short, Sweet, and Silly",
+ "price": 52.87,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/shrunken-treasures-literary-classics-short-sweet-and-silly_484/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4f/1e/4f1ece2500f8dbacecca42d57befca03.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Rich Dad, Poor Dad",
+ "price": 51.74,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/rich-dad-poor-dad_483/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/18/f4/18f45d31e3892fee589e23f15d759ee3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Raymie Nightingale",
+ "price": 34.41,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/raymie-nightingale_482/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8f/66/8f66ec46e671d6fca79649c10c7c8f8a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Playing from the Heart",
+ "price": 32.38,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/playing-from-the-heart_481/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1c/eb/1cebdf525ebe970a1dc3c5a8c50eae6b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Nightstruck: A Novel",
+ "price": 50.35,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/nightstruck-a-novel_480/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c0/df/c0dfd5388bb38b9c24da2e94534e1198.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Naturally Lean: 125 Nourishing Gluten-Free, Plant-Based Recipes--All Under 300 Calories",
+ "price": 11.38,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/naturally-lean-125-nourishing-gluten-free-plant-based-recipes-all-under-300-calories_479/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e6/b6/e6b66353f9325518994dd8b564290fd7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Meternity",
+ "price": 43.58,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/meternity_478/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/39/e3/39e33ebef2d7a35dd6899541eba8306d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Memoirs of a Geisha",
+ "price": 49.67,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/memoirs-of-a-geisha_477/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/41/80/4180406c788ff3e0f37cd4491a260a5b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Like Never Before (Walker Family #2)",
+ "price": 28.77,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/like-never-before-walker-family-2_476/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/17/e2/17e264d978942f73b859fa1c1d2cf827.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Life of Pi",
+ "price": 13.22,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/life-of-pi_475/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e7/ae/e7aee104ca78dac961bd906294fe88f1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Leave This Song Behind: Teen Poetry at Its Best",
+ "price": 51.17,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/leave-this-song-behind-teen-poetry-at-its-best_474/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/31/c7/31c7c5ce7b04d227aa36ecb250b9dad5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "King\u0027s Folly (The Kinsman Chronicles #1)",
+ "price": 39.61,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/kings-folly-the-kinsman-chronicles-1_473/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3e/2d/3e2d526ee062008ab1cbf54f90a5abb2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "John Adams",
+ "price": 57.43,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/john-adams_472/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/59/b4/59b4f94b4dc4c7cb844a6f24a5e2a41e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "How to Cook Everything Vegetarian: Simple Meatless Recipes for Great Food (How to Cook Everything)",
+ "price": 46.01,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/how-to-cook-everything-vegetarian-simple-meatless-recipes-for-great-food-how-to-cook-everything_471/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/59/2d/592dc2dee11b798780f5ae613b970a34.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "How to Be a Domestic Goddess: Baking and the Art of Comfort Cooking",
+ "price": 28.25,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/how-to-be-a-domestic-goddess-baking-and-the-art-of-comfort-cooking_470/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e2/5c/e25cbc27ebc12e47cdf3f7adc87cccdc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Good in Bed (Cannie Shapiro #1)",
+ "price": 37.05,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/good-in-bed-cannie-shapiro-1_469/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1d/f4/1df443b1bd6d7a1d804b4780a666438f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Fruits Basket, Vol. 7 (Fruits Basket #7)",
+ "price": 19.57,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/fruits-basket-vol-7-fruits-basket-7_468/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b4/36/b43672509477baa090e57ebeacbb28fb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "For the Love: Fighting for Grace in a World of Impossible Standards",
+ "price": 45.13,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/for-the-love-fighting-for-grace-in-a-world-of-impossible-standards_467/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a7/d8/a7d8fda2a874567aab8f61b2b141a5e2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Finding God in the Ruins: How God Redeems Pain",
+ "price": 46.64,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/finding-god-in-the-ruins-how-god-redeems-pain_466/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ae/2c/ae2ce9662ed6da3de501ff87551ccb2d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Every Heart a Doorway (Every Heart A Doorway #1)",
+ "price": 12.16,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/every-heart-a-doorway-every-heart-a-doorway-1_465/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/50/d4/50d41a24990208deb72c9802a6c1e540.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Delivering the Truth (Quaker Midwife Mystery #1)",
+ "price": 20.89,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/delivering-the-truth-quaker-midwife-mystery-1_464/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/57/31/5731a5d46c2c1e88977eb5e6d1337a2e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Counted With the Stars (Out from Egypt #1)",
+ "price": 17.97,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/counted-with-the-stars-out-from-egypt-1_463/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/32/2c/322c1f6cce6d5a69a7d2321779195a0c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Chronicles, Vol. 1",
+ "price": 52.6,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/chronicles-vol-1_462/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/11/fc/11fc94453c4dc0d68543971d7843afb0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Blue Like Jazz: Nonreligious Thoughts on Christian Spirituality",
+ "price": 25.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/blue-like-jazz-nonreligious-thoughts-on-christian-spirituality_461/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a2/f5/a2f5b5fd4421d56d37c73a7fb29f5f40.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Benjamin Franklin: An American Life",
+ "price": 48.19,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/benjamin-franklin-an-american-life_460/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/25/f8/25f869fa75340fca0fc2a68e8a0412a1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "At The Existentialist Café: Freedom, Being, and apricot cocktails with: Jean-Paul Sartre, Simone de Beauvoir, Albert Camus, Martin Heidegger, Edmund Husserl, Karl Jaspers, Maurice Merleau-Ponty and others",
+ "price": 29.93,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/at-the-existentialist-cafe-freedom-being-and-apricot-cocktails-with-jean-paul-sartre-simone-de-beauvoir-albert-camus-martin-heidegger-edmund-husserl-karl-jaspers-maurice-merleau-ponty-and-others_459/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/de/76/de76d5c473c358bd41c03cf710692bfb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "A Summer In Europe",
+ "price": 44.34,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/a-summer-in-europe_458/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4e/15/4e15150388702ebca2c5a523ac270539.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "A Short History of Nearly Everything",
+ "price": 52.4,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-short-history-of-nearly-everything_457/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3c/f6/3cf646523ff7fb8647c500d6325cfcaf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "A Gathering of Shadows (Shades of Magic #2)",
+ "price": 44.81,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/a-gathering-of-shadows-shades-of-magic-2_456/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/48/b2/48b20fcc9ab722729de2c4da3d4de26e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Sound Of Love",
+ "price": 57.84,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-sound-of-love_455/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4e/3a/4e3a151bbe2629a55df09fd318fdeb0a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Rise and Fall of the Third Reich: A History of Nazi Germany",
+ "price": 39.67,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-rise-and-fall-of-the-third-reich-a-history-of-nazi-germany_454/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e1/02/e102cefae5bb523bc67eb6b49bc18b5d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Perks of Being a Wallflower",
+ "price": 55.02,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-perks-of-being-a-wallflower_453/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ca/5b/ca5b33c09daab4667ed37b330de889bd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Mysterious Affair at Styles (Hercule Poirot #1)",
+ "price": 24.8,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-mysterious-affair-at-styles-hercule-poirot-1_452/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/32/94/3294e5eaf73a37958583483fc9a90f04.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Man Who Mistook His Wife for a Hat and Other Clinical Tales",
+ "price": 59.45,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-man-who-mistook-his-wife-for-a-hat-and-other-clinical-tales_451/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/92/fe/92fe1c1823653412fe68be2c525dfc3a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Makings of a Fatherless Child",
+ "price": 31.58,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-makings-of-a-fatherless-child_450/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6f/6c/6f6c7560e254f8242f86ef048f1ba7b3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Joy of Cooking",
+ "price": 43.27,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-joy-of-cooking_449/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/05/8e/058ebff59d12ebe40df1844bedd9366b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Invention of Wings",
+ "price": 37.34,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-invention-of-wings_448/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/62/fa/62fa1e72f06f05762db5d9cedf654153.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Hobbit (Middle-Earth Universe)",
+ "price": 17.8,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-hobbit-middle-earth-universe_447/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8b/d3/8bd38de5367fc675467431f343862569.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Great Railway Bazaar",
+ "price": 30.54,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-great-railway-bazaar_446/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/76/de/76de41867f323d7f1f4fbe2fdfc1b2ba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Golden Compass (His Dark Materials #1)",
+ "price": 18.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-golden-compass-his-dark-materials-1_445/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e7/9f/e79f81bfea1cb8b0503db022b64da713.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The God Delusion",
+ "price": 46.85,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-god-delusion_444/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/36/64/36643d44134c8a227988927013805e61.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Girl You Left Behind (The Girl You Left Behind #1)",
+ "price": 15.79,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-girl-you-left-behind-the-girl-you-left-behind-1_443/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d0/b6/d0b6d59c0662dcbd15d47add40af1ebd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Fellowship of the Ring (The Lord of the Rings #1)",
+ "price": 10.27,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-fellowship-of-the-ring-the-lord-of-the-rings-1_442/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ed/75/ed75000b92734d99b76a17954857327c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Collected Poems of W.B. Yeats (The Collected Works of W.B. Yeats #1)",
+ "price": 15.42,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-collected-poems-of-wb-yeats-the-collected-works-of-wb-yeats-1_441/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7e/93/7e934132cd03486649fb492fe702f704.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Barefoot Contessa Cookbook",
+ "price": 59.92,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-barefoot-contessa-cookbook_440/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/dd/07/dd07bd0c443756b9dc260813c1949b4f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Tell the Wolves I\u0027m Home",
+ "price": 50.96,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/tell-the-wolves-im-home_439/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f9/72/f972e744117c9d4b5fefb3410c0e9f7c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Ship Leaves Harbor: Essays on Travel by a Recovering Journeyman",
+ "price": 30.6,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/ship-leaves-harbor-essays-on-travel-by-a-recovering-journeyman_438/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/31/b0/31b0e0a42826b326e43235beb8ddd783.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Pride and Prejudice",
+ "price": 19.27,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/pride-and-prejudice_437/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c8/09/c80991f861675b6e75dc7f2f6a50e5a0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Musicophilia: Tales of Music and the Brain",
+ "price": 46.58,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/musicophilia-tales-of-music-and-the-brain_436/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/02/66/02667c5b8f5a5e9e45c0799518f086ca.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Mere Christianity",
+ "price": 48.51,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/mere-christianity_435/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d2/90/d29093abd0b9d5258e2e08b731778158.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Me Before You (Me Before You #1)",
+ "price": 19.02,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/me-before-you-me-before-you-1_434/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a2/cd/a2cd0016b37c0407059147e58e14afe5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "In the Woods (Dublin Murder Squad #1)",
+ "price": 38.38,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/in-the-woods-dublin-murder-squad-1_433/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/24/a1/24a175dac7cb91ff26e2d723cdc6e098.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "In Cold Blood",
+ "price": 49.98,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/in-cold-blood_432/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/eb/4e/eb4ea9c04dccab509451ba31feb6b4e8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "How to Stop Worrying and Start Living",
+ "price": 46.49,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/how-to-stop-worrying-and-start-living_431/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4f/08/4f08f7948770912e4e340e10caa604cb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Give It Back",
+ "price": 18.32,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/give-it-back_430/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8b/7c/8b7c73e075cc687b6890dc0dca9fcbcc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Girl, Interrupted",
+ "price": 42.14,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/girl-interrupted_429/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f9/ec/f9ec97bd8b29cc4e36d6c2b093d04709.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Fun Home: A Family Tragicomic",
+ "price": 56.59,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/fun-home-a-family-tragicomic_428/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/54/ae/54ae8233e8422676c241d1cea0b67f1d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Fruits Basket, Vol. 6 (Fruits Basket #6)",
+ "price": 20.96,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/fruits-basket-vol-6-fruits-basket-6_427/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/94/1a/941a14dec32f0a949c38a325a715c138.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Deception Point",
+ "price": 40.32,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/deception-point_426/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fa/2d/fa2d3198b7ba9785e0edd6f41b84d72b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Death Note, Vol. 6: Give-and-Take (Death Note #6)",
+ "price": 36.39,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/death-note-vol-6-give-and-take-death-note-6_425/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/07/5c/075c210f5ce43b84d29646a54529d1bd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Catherine the Great: Portrait of a Woman",
+ "price": 58.55,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/catherine-the-great-portrait-of-a-woman_424/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/72/f1/72f13b8f069d3a018d2c378be5a1de20.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Better Homes and Gardens New Cook Book",
+ "price": 39.61,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/better-homes-and-gardens-new-cook-book_423/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/75/82/7582e20b84f603358a8d55cd6a0a50f4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "An Unquiet Mind: A Memoir of Moods and Madness",
+ "price": 21.3,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/an-unquiet-mind-a-memoir-of-moods-and-madness_422/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/00/29/002924b764dc367dcaa3486fa4c0aa0b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "A Year in Provence (Provence #1)",
+ "price": 56.88,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/a-year-in-provence-provence-1_421/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/db/46/db46159b05faa5d95262112bf9c29ddd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "World Without End (The Pillars of the Earth #2)",
+ "price": 32.97,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/world-without-end-the-pillars-of-the-earth-2_420/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/be/7c/be7ce6fbc9a8e1a5a5b5c32e73cfd78a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Will Grayson, Will Grayson (Will Grayson, Will Grayson)",
+ "price": 47.31,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/will-grayson-will-grayson-will-grayson-will-grayson_419/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/de/a1/dea174c8a8dbfd98e5e05c9e479a52b2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Why Save the Bankers?: And Other Essays on Our Economic and Political Crisis",
+ "price": 48.67,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/why-save-the-bankers-and-other-essays-on-our-economic-and-political-crisis_418/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/16/f5/16f545b2e14c16ed4bd0e098a0700b57.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Where She Went (If I Stay #2)",
+ "price": 41.73,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/where-she-went-if-i-stay-2_417/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/05/86/0586b3d79013f606494e843de1faea0b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "What If?: Serious Scientific Answers to Absurd Hypothetical Questions",
+ "price": 53.68,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/what-if-serious-scientific-answers-to-absurd-hypothetical-questions_416/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/59/bc/59bcc421ae9f5a6f12ef11e849fb745d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Two Summers",
+ "price": 14.64,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/two-summers_415/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/89/16/89165d7488fbaa9e60cfcabe56796288.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "This Is Your Brain on Music: The Science of a Human Obsession",
+ "price": 38.4,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/this-is-your-brain-on-music-the-science-of-a-human-obsession_414/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/35/a4/35a4a7c6c76c4e82186753078e441654.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Secret Garden",
+ "price": 15.08,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-secret-garden_413/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c5/46/c5465a06182ed6ebfa40d049258a2f58.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Raven King (The Raven Cycle #4)",
+ "price": 30.57,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-raven-king-the-raven-cycle-4_412/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/da/54/da54d953f00d1e465f31f865df3d0f3f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Raven Boys (The Raven Cycle #1)",
+ "price": 57.74,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-raven-boys-the-raven-cycle-1_411/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3c/a4/3ca4889e4bb7f9a1cc1d7a1c920e9d42.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Power Greens Cookbook: 140 Delicious Superfood Recipes",
+ "price": 11.05,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-power-greens-cookbook-140-delicious-superfood-recipes_410/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/82/1d/821d2c02dcd0a10fc9d533917482746e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Metamorphosis",
+ "price": 28.58,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-metamorphosis_409/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4a/1b/4a1b6e9c1af75db0dc34ae63344f6883.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Mathews Men: Seven Brothers and the War Against Hitler\u0027s U-boats",
+ "price": 42.91,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-mathews-men-seven-brothers-and-the-war-against-hitlers-u-boats_408/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f2/64/f26457d65a03b2636c4bcc7c318f7346.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Little Paris Bookshop",
+ "price": 24.73,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-little-paris-bookshop_407/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/50/a9/50a901fb008c0b8965c8d4da2dff5470.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Hiding Place",
+ "price": 55.91,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-hiding-place_406/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cf/18/cf187c1dc5575fcbbf49c58024146c4b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Grand Design",
+ "price": 13.76,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-grand-design_405/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/08/a9/08a957eb34f8047862e225774c3bdde2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Firm",
+ "price": 45.56,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-firm_404/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/95/84/95847132a78de44b7249a2d0a3fe3ef6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Fault in Our Stars",
+ "price": 47.22,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-fault-in-our-stars_403/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/69/61/696100859e82b2ec7a796129d6cca44a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The False Prince (The Ascendance Trilogy #1)",
+ "price": 56.0,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-false-prince-the-ascendance-trilogy-1_402/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f8/e3/f8e371e2869d13b9d89999f8d5173245.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Expatriates",
+ "price": 44.58,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-expatriates_401/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/db/e4/dbe49e1cb06136eeb51182f551ccdc52.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Dream Thieves (The Raven Cycle #2)",
+ "price": 34.5,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-dream-thieves-the-raven-cycle-2_400/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d9/7a/d97a3a4a65b5275ab506b28c7a88e0a5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Darkest Corners",
+ "price": 11.33,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-darkest-corners_399/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c1/ab/c1ab73a20d02b5f3a5599e7c5704a909.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Crossover",
+ "price": 38.77,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-crossover_398/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9f/35/9f351ca1978128c60a3b7f85987075b3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The 5th Wave (The 5th Wave #1)",
+ "price": 11.83,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-5th-wave-the-5th-wave-1_397/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/10/d0/10d0c5e47d0e8cce16b6b5e6be48cb16.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Tell the Wind and Fire",
+ "price": 45.51,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/tell-the-wind-and-fire_396/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3b/0c/3b0c5f4df26b73659af4e25107499384.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Tell Me Three Things",
+ "price": 41.81,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/tell-me-three-things_395/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a1/2f/a12f0bec8c8728800f901b4e5f6e3f9a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Talking to Girls About Duran Duran: One Young Man\u0027s Quest for True Love and a Cooler Haircut",
+ "price": 25.15,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/talking-to-girls-about-duran-duran-one-young-mans-quest-for-true-love-and-a-cooler-haircut_394/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/07/8b/078b934613af473daf7ecf918e05d050.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Siddhartha",
+ "price": 34.22,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/siddhartha_393/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ce/0b/ce0be2d86e388540122c222306c6d62c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Shiver (The Wolves of Mercy Falls #1)",
+ "price": 16.23,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/shiver-the-wolves-of-mercy-falls-1_392/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/84/73/847399651d8f2dfae1a0d5a0ea4064b2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Remember Me?",
+ "price": 11.48,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/remember-me_391/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3f/95/3f9572f94858197e92786b194f0f12df.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Red Dragon (Hannibal Lecter #1)",
+ "price": 23.37,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/red-dragon-hannibal-lecter-1_390/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/30/66/3066f8bcd2e2ed6b45084355ff084a61.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Peak: Secrets from the New Science of Expertise",
+ "price": 16.28,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/peak-secrets-from-the-new-science-of-expertise_389/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/83/ab/83ab65f938b24fa1a9cb47235be49b57.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "My Mother Was Nuts",
+ "price": 31.63,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/my-mother-was-nuts_388/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9b/b4/9bb42bf833e91193ca05badddded4bfb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Mexican Today: New and Rediscovered Recipes for Contemporary Kitchens",
+ "price": 24.91,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/mexican-today-new-and-rediscovered-recipes-for-contemporary-kitchens_387/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5d/02/5d029bff299cdb777e06f35800faa628.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Maybe Something Beautiful: How Art Transformed a Neighborhood",
+ "price": 22.54,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/maybe-something-beautiful-how-art-transformed-a-neighborhood_386/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c0/bb/c0bb6e42743b9c1aaf9b754501100a5d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Lola and the Boy Next Door (Anna and the French Kiss #2)",
+ "price": 23.63,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/lola-and-the-boy-next-door-anna-and-the-french-kiss-2_385/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bc/c8/bcc8374e0c81ded1486b6225ca4fe78a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Logan Kade (Fallen Crest High #5.5)",
+ "price": 13.12,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/logan-kade-fallen-crest-high-55_384/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d9/4e/d94e6206c2decd3acd9a61b2cbac7eaf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Last One Home (New Beginnings #1)",
+ "price": 59.98,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/last-one-home-new-beginnings-1_383/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e4/0a/e40a336622fe578699be5a1eeba18f9d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Killing Floor (Jack Reacher #1)",
+ "price": 31.49,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/killing-floor-jack-reacher-1_382/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/eb/e9/ebe9f06ccebf83d9853a846052b58fff.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Kill the Boy Band",
+ "price": 15.52,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/kill-the-boy-band_381/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/05/74/0574a71ccaff1fef1f8e9a1f4c22b7bc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Isla and the Happily Ever After (Anna and the French Kiss #3)",
+ "price": 48.13,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/isla-and-the-happily-ever-after-anna-and-the-french-kiss-3_380/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0d/0b/0d0bd1fce3e0171cf101764393caea41.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "If I Stay (If I Stay #1)",
+ "price": 38.13,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/if-i-stay-if-i-stay-1_379/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cb/b3/cbb3754c7bae0d54dcf561aed4f9d6e3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "I Know Why the Caged Bird Sings (Maya Angelou\u0027s Autobiography #1)",
+ "price": 36.55,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/i-know-why-the-caged-bird-sings-maya-angelous-autobiography-1_378/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c1/42/c14297e48de02ac420c587822ff329ab.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Harry Potter and the Deathly Hallows (Harry Potter #7)",
+ "price": 23.32,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/harry-potter-and-the-deathly-hallows-harry-potter-7_377/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/58/e4/58e434a6a4eb267eac7aa529b0c2ec15.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Fruits Basket, Vol. 5 (Fruits Basket #5)",
+ "price": 16.33,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/fruits-basket-vol-5-fruits-basket-5_376/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/51/cf/51cf19c74f21a7043910615fefcf0847.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Foundation (Foundation (Publication Order) #1)",
+ "price": 32.42,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/foundation-foundation-publication-order-1_375/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8b/92/8b9267df86378b6973974ae7e1924ffe.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Fool Me Once",
+ "price": 16.96,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/fool-me-once_374/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b6/9c/b69c4ea86e09921aabc4e0431a8273a5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Find Her (Detective D.D. Warren #8)",
+ "price": 22.37,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/find-her-detective-dd-warren-8_373/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f6/f2/f6f2094e8a318093fa53784df2bfeab8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Evicted: Poverty and Profit in the American City",
+ "price": 42.27,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/evicted-poverty-and-profit-in-the-american-city_372/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d0/4f/d04f8176cf0527b293114173d01999d7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Drama",
+ "price": 38.7,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/drama_371/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/68/ce/68ce8be6a167f510d07a7da637b62c6f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Dracula the Un-Dead",
+ "price": 35.63,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/dracula-the-un-dead_370/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/13/ff/13fffcde653948339d3427184b7bd0b5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Digital Fortress",
+ "price": 58.0,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/digital-fortress_369/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5c/77/5c770b251d27aeef263f8ae974ca02e0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Death Note, Vol. 5: Whiteout (Death Note #5)",
+ "price": 52.41,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/death-note-vol-5-whiteout-death-note-5_368/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4e/c1/4ec161cc09ee437c9eda6d437d232a11.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Data, A Love Story: How I Gamed Online Dating to Meet My Match",
+ "price": 32.35,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/data-a-love-story-how-i-gamed-online-dating-to-meet-my-match_367/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1f/d8/1fd8340d9b3fd95861f0407b4dbb0fa7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Critique of Pure Reason",
+ "price": 20.75,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/critique-of-pure-reason_366/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/12/6e/126ef8f6473b81808ebbb9cff155e883.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Booked",
+ "price": 17.49,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/booked_365/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8f/46/8f46bb13feb3a4440a27dfcf688fbaa6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Blue Lily, Lily Blue (The Raven Cycle #3)",
+ "price": 34.13,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/blue-lily-lily-blue-the-raven-cycle-3_364/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/db/14/db14903b3a56a297ef6aefe7624d637f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Approval Junkie: Adventures in Caring Too Much",
+ "price": 58.81,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/approval-junkie-adventures-in-caring-too-much_363/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/17/aa/17aacb738eace89a635a4eb47a94c11d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "An Abundance of Katherines",
+ "price": 10.0,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/an-abundance-of-katherines_362/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ed/45/ed4517339d4780f4158c485c83850d20.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "America\u0027s War for the Greater Middle East: A Military History",
+ "price": 51.22,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/americas-war-for-the-greater-middle-east-a-military-history_361/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/eb/17/eb178eceef1e9290591cabd5155571a3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Alight (The Generations Trilogy #2)",
+ "price": 58.59,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/alight-the-generations-trilogy-2_360/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5e/f3/5ef34ba3e937218db15178a1a5ce195f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "A Girl\u0027s Guide to Moving On (New Beginnings #2)",
+ "price": 31.3,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-girls-guide-to-moving-on-new-beginnings-2_359/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f7/a9/f7a90a63f66ac92cc280def001970ed2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "A Game of Thrones (A Song of Ice and Fire #1)",
+ "price": 46.42,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/a-game-of-thrones-a-song-of-ice-and-fire-1_358/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/13/d1/13d11b26b46484ee73e9923ff307a7b4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "A Feast for Crows (A Song of Ice and Fire #4)",
+ "price": 17.21,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/a-feast-for-crows-a-song-of-ice-and-fire-4_357/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b3/6b/b36b278233baf55ebaad761d8d3d0fec.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "A Clash of Kings (A Song of Ice and Fire #2)",
+ "price": 10.79,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/a-clash-of-kings-a-song-of-ice-and-fire-2_356/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1a/29/1a298a157f4113d6e0127521aaa1f5f0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Vogue Colors A to Z: A Fashion Coloring Book",
+ "price": 52.35,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/vogue-colors-a-to-z-a-fashion-coloring-book_355/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1f/55/1f5541682b39b390a3db41430922d510.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Shining (The Shining #1)",
+ "price": 27.88,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-shining-the-shining-1_354/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/db/96/db9686744f93c0e9ff3945144827f99a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Pilgrim\u0027s Progress",
+ "price": 50.26,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-pilgrims-progress_353/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/45/bb/45bb59d19eb3aa868293d44809078418.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Perfect Play (Play by Play #1)",
+ "price": 59.99,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-perfect-play-play-by-play-1_352/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/40/16/4016ffba678f309171d8130135f6eb8e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Passion of Dolssa",
+ "price": 28.32,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-passion-of-dolssa_351/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6b/82/6b822681c4035131560d40dd3b5a6a2e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Jazz of Physics: The Secret Link Between Music and the Structure of the Universe",
+ "price": 38.71,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-jazz-of-physics-the-secret-link-between-music-and-the-structure-of-the-universe_350/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2d/32/2d32efe1c5f97510596a2cc21c5daf5d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Hunger Games (The Hunger Games #1)",
+ "price": 29.85,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-hunger-games-the-hunger-games-1_349/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/41/c7/41c72a9c7733fc5f7434b2fa33060c54.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Hound of the Baskervilles (Sherlock Holmes #5)",
+ "price": 14.82,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-hound-of-the-baskervilles-sherlock-holmes-5_348/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1f/b0/1fb03cdabe6001c8a2620f65e025cbd5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Gunning of America: Business and the Making of American Gun Culture",
+ "price": 16.81,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-gunning-of-america-business-and-the-making-of-american-gun-culture_347/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/28/a8/28a8784d0b38b148a35bce421dc16910.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Geography of Bliss: One Grump\u0027s Search for the Happiest Places in the World",
+ "price": 28.23,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-geography-of-bliss-one-grumps-search-for-the-happiest-places-in-the-world_346/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bd/a0/bda0fa21e6d06862920c0eedecc6201e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Demonists (Demonist #1)",
+ "price": 52.11,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-demonists-demonist-1_345/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1a/d2/1ad2a260776198051f4d1849be347cc6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Demon Prince of Momochi House, Vol. 4 (The Demon Prince of Momochi House #4)",
+ "price": 27.88,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-demon-prince-of-momochi-house-vol-4-the-demon-prince-of-momochi-house-4_344/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/47/71/477173fe3000a6da4b241c2e71a21418.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Bone Hunters (Lexy Vaughan \u0026 Steven Macaulay #2)",
+ "price": 59.71,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-bone-hunters-lexy-vaughan-steven-macaulay-2_343/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ee/d4/eed4d5d63d13f0aa86575c90f8ccacb7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Beast (Black Dagger Brotherhood #14)",
+ "price": 46.08,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-beast-black-dagger-brotherhood-14_342/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1b/3f/1b3f5057f9e7f7cb81a8c10b58024145.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Some Women",
+ "price": 13.73,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/some-women_341/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/27/b7/27b7f4ec590965b5acc15dc4b1376684.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Shopaholic Ties the Knot (Shopaholic #3)",
+ "price": 48.39,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/shopaholic-ties-the-knot-shopaholic-3_340/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ac/ba/acba5e4e1813b8c1fff4890f1efef3ab.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Paper and Fire (The Great Library #2)",
+ "price": 49.45,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/paper-and-fire-the-great-library-2_339/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a7/04/a704d4248b21c0cdd8038c1b8345ed17.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Outlander (Outlander #1)",
+ "price": 19.67,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/outlander-outlander-1_338/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b1/0b/b10ba73e67297fc8ed9e877bdcf60813.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Orchestra of Exiles: The Story of Bronislaw Huberman, the Israel Philharmonic, and the One Thousand Jews He Saved from Nazi Horrors",
+ "price": 12.36,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/orchestra-of-exiles-the-story-of-bronislaw-huberman-the-israel-philharmonic-and-the-one-thousand-jews-he-saved-from-nazi-horrors_337/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/15/de/15de75548ee9a4c6be1420ee309c03e0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "No One Here Gets Out Alive",
+ "price": 20.02,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/no-one-here-gets-out-alive_336/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7a/7e/7a7eb52e7075a5305522948375c1316e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Night Shift (Night Shift #1-20)",
+ "price": 12.75,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/night-shift-night-shift-1-20_335/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c0/02/c0029d48c2588e6d2a6a31c9f96088ba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Needful Things",
+ "price": 47.51,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/needful-things_334/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2d/e0/2de0eff716ca13d12cf5420e88e1a8b3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Mockingjay (The Hunger Games #3)",
+ "price": 20.44,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/mockingjay-the-hunger-games-3_333/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/76/b4/76b462eda7a84ccf39a543d63c695ca7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Misery",
+ "price": 34.79,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/misery_332/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7c/93/7c9302e392e128881e926d19f761da33.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Little Women (Little Women #1)",
+ "price": 28.07,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/little-women-little-women-1_331/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/81/f5/81f559ebe403317226fa8b611e35ce8a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "It",
+ "price": 25.01,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/it_330/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f7/b7/f7b73392b12909a1e8261ef3f96c5fd1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Harry Potter and the Sorcerer\u0027s Stone (Harry Potter #1)",
+ "price": 13.9,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/harry-potter-and-the-sorcerers-stone-harry-potter-1_329/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/04/c8/04c8a51d23d4335d300324e917ca4d8f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Harry Potter and the Prisoner of Azkaban (Harry Potter #3)",
+ "price": 24.17,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/harry-potter-and-the-prisoner-of-azkaban-harry-potter-3_328/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d1/fb/d1fbdddb0d4fb0c445a33c6d003d0990.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Harry Potter and the Order of the Phoenix (Harry Potter #5)",
+ "price": 31.63,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/harry-potter-and-the-order-of-the-phoenix-harry-potter-5_327/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/96/11/9611147982037cd7d79483452938c10f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Harry Potter and the Half-Blood Prince (Harry Potter #6)",
+ "price": 48.75,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/harry-potter-and-the-half-blood-prince-harry-potter-6_326/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c8/24/c8248518fb59de3a798a4b5baae949b5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Harry Potter and the Chamber of Secrets (Harry Potter #2)",
+ "price": 14.74,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/harry-potter-and-the-chamber-of-secrets-harry-potter-2_325/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fc/08/fc08dcfc1ae86bbd5bc0bca74c9b6d3d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Gone with the Wind",
+ "price": 32.49,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/gone-with-the-wind_324/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/27/82/2782701b5c877cb063065b9fc14c5b13.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "God Is Not Great: How Religion Poisons Everything",
+ "price": 27.8,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/god-is-not-great-how-religion-poisons-everything_323/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d2/80/d280aed3d0c46653a9c33f76559e9e6d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Girl With a Pearl Earring",
+ "price": 26.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/girl-with-a-pearl-earring_322/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b7/ad/b7ad37d93d8401c84d7325aa645ff6d5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Fruits Basket, Vol. 4 (Fruits Basket #4)",
+ "price": 50.44,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/fruits-basket-vol-4-fruits-basket-4_321/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/38/79/38794d8729a111018260d931e7101de2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Far From True (Promise Falls Trilogy #2)",
+ "price": 34.93,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/far-from-true-promise-falls-trilogy-2_320/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/87/54/8754267f27581996f93e8d94d3c04bf9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Dark Lover (Black Dagger Brotherhood #1)",
+ "price": 12.87,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/dark-lover-black-dagger-brotherhood-1_319/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3c/a2/3ca2e61181fc1122658af8f85354bae8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Confessions of a Shopaholic (Shopaholic #1)",
+ "price": 48.94,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/confessions-of-a-shopaholic-shopaholic-1_318/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e3/b5/e3b5a3dcc2993295f5a6fb429052799c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Changing the Game (Play by Play #2)",
+ "price": 13.38,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/changing-the-game-play-by-play-2_317/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/57/47/57472d9c6d483bee9c38c90bfa10b3ee.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Candide",
+ "price": 58.63,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/candide_316/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e3/c4/e3c4aba2409bb769a6488805e3fc4709.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Can You Keep a Secret?",
+ "price": 21.94,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/can-you-keep-a-secret_315/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/72/73/7273ff1bfe3b0a6aab7f54ddf9be7b44.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Atlas Shrugged",
+ "price": 26.58,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/atlas-shrugged_314/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a5/4f/a54fea8d034eba2ee4d1b8af30f1a308.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Animal Farm",
+ "price": 57.22,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/animal-farm_313/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/10/db/10db56354b4550d92270c6f097d9bebc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "A Walk to Remember",
+ "price": 56.43,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-walk-to-remember_312/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fa/1b/fa1b0fac146201645c740b02802e2211.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "A New Earth: Awakening to Your Life\u0027s Purpose",
+ "price": 55.65,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-new-earth-awakening-to-your-lifes-purpose_311/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/83/c8/83c834b3779be4e577c37ead6d2acf65.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "A History of God: The 4,000-Year Quest of Judaism, Christianity, and Islam",
+ "price": 27.62,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/a-history-of-god-the-4000-year-quest-of-judaism-christianity-and-islam_310/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/71/91/7191a7d76eb6c3a18259541e2c038ae3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "\u0027Salem\u0027s Lot",
+ "price": 49.56,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/salems-lot_309/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ee/d3/eed3afc5e444e3da5eec34e2b0036ec7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Zero History (Blue Ant #3)",
+ "price": 34.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/zero-history-blue-ant-3_308/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/74/52/74524b04dc99cbfc7bf5d37fcc1489ab.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Wuthering Heights",
+ "price": 17.73,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/wuthering-heights_307/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/93/4e/934e966c1ddf559d3ac2b5c1407aaf1e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "World War Z: An Oral History of the Zombie War",
+ "price": 21.8,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/world-war-z-an-oral-history-of-the-zombie-war_306/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7e/bf/7ebfa1c62b21beeaad37a6474a39cfe8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Wild: From Lost to Found on the Pacific Crest Trail",
+ "price": 46.02,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/wild-from-lost-to-found-on-the-pacific-crest-trail_305/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c8/41/c841873951efb18dea28162452efff58.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Where\u0027d You Go, Bernadette",
+ "price": 18.13,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/whered-you-go-bernadette_304/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c6/7e/c67eb0d6e56c4459e8c0d45c08471a89.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "When You Are Engulfed in Flames",
+ "price": 30.89,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/when-you-are-engulfed-in-flames_303/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/73/36/733662595aede2dff1a5be1e76a3b936.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "We the People: The Modern-Day Figures Who Have Reshaped and Affirmed the Founding Fathers\u0027 Vision of America",
+ "price": 31.95,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/we-the-people-the-modern-day-figures-who-have-reshaped-and-affirmed-the-founding-fathers-vision-of-america_302/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f6/52/f65271ce557e9192537e24847bbb1210.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "We Are All Completely Beside Ourselves",
+ "price": 24.04,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/we-are-all-completely-beside-ourselves_301/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4d/18/4d1891e435c6692c864331c585e0d014.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Walk the Edge (Thunder Road #2)",
+ "price": 32.36,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/walk-the-edge-thunder-road-2_300/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/61/2c/612ce7fa4cbee472392ce8721a4e863e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Voyager (Outlander #3)",
+ "price": 21.07,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/voyager-outlander-3_299/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b5/d8/b5d813da01f2ccd7bcfe34e2b875e752.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Very Good Lives: The Fringe Benefits of Failure and the Importance of Imagination",
+ "price": 50.66,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/very-good-lives-the-fringe-benefits-of-failure-and-the-importance-of-imagination_298/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ab/ac/abac4222af5cc296b704a0e5df82e162.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Vegan Vegetarian Omnivore: Dinner for Everyone at the Table",
+ "price": 13.66,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/vegan-vegetarian-omnivore-dinner-for-everyone-at-the-table_297/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/80/63/80631f8bca036361343fdce528725654.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Unstuffed: Decluttering Your Home, Mind, and Soul",
+ "price": 58.09,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/unstuffed-decluttering-your-home-mind-and-soul_296/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/14/07/1407c2d6318956b10abd970c2e83154d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Under the Banner of Heaven: A Story of Violent Faith",
+ "price": 30.0,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/under-the-banner-of-heaven-a-story-of-violent-faith_295/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/14/2f/142f99787241bb65e031a76e74e14d1b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Two Boys Kissing",
+ "price": 32.74,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/two-boys-kissing_294/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/53/bd/53bd80b1fc1914f418dc31a9d6571cb1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Twilight (Twilight #1)",
+ "price": 41.93,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/twilight-twilight-1_293/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/70/10/7010c24f80a4172f7405677ef0592f26.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Twenties Girl",
+ "price": 42.8,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/twenties-girl_292/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a0/fa/a0fa38039f6a674a7c89dfe2be866259.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Trespassing Across America: One Man\u0027s Epic, Never-Done-Before (and Sort of Illegal) Hike Across the Heartland",
+ "price": 53.51,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/trespassing-across-america-one-mans-epic-never-done-before-and-sort-of-illegal-hike-across-the-heartland_291/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/77/bc/77bcc3cde72998ee488ac169f7e4e540.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Three-Martini Lunch",
+ "price": 23.21,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/three-martini-lunch_290/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1d/8e/1d8eb8aaebd14464fc58a681091b8d45.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Thinking, Fast and Slow",
+ "price": 21.14,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/thinking-fast-and-slow_289/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b4/a5/b4a56663d56f1e84ee1b15bd819563cc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Wild Robot",
+ "price": 56.07,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-wild-robot_288/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bf/db/bfdbf9726621276fc7821d705690dbae.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Wicked + The Divine, Vol. 3: Commercial Suicide (The Wicked + The Divine)",
+ "price": 14.41,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-wicked-the-divine-vol-3-commercial-suicide-the-wicked-the-divine_287/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ee/ed/eeeddf8af9e6cc8c7f71c0e41de1b562.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Undomestic Goddess",
+ "price": 45.75,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-undomestic-goddess_286/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/13/8f/138f4cf84be250d08e1f5c1db3643dbc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Travelers",
+ "price": 15.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-travelers_285/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2a/a8/2aa8afd15f97617ab75f616766161cda.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Tipping Point: How Little Things Can Make a Big Difference",
+ "price": 10.02,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-tipping-point-how-little-things-can-make-a-big-difference_284/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/27/3d/273d4c813111bc482e8c473ebd90fbbb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Thing About Jellyfish",
+ "price": 48.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-thing-about-jellyfish_283/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e0/90/e090748ce5a567207aed9185c97eb34b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Stand",
+ "price": 57.86,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-stand_282/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3a/7c/3a7c2393061031e7911d7b533b723391.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Smitten Kitchen Cookbook",
+ "price": 23.59,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-smitten-kitchen-cookbook_281/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8e/09/8e09faaea71886048b27959e607e6c7b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Silkworm (Cormoran Strike #2)",
+ "price": 23.05,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-silkworm-cormoran-strike-2_280/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3a/2c/3a2c46cd40a7ecbd7c40815d6390fb8a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Sandman, Vol. 3: Dream Country (The Sandman (volumes) #3)",
+ "price": 55.55,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-sandman-vol-3-dream-country-the-sandman-volumes-3_279/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bb/18/bb1845c22faea465cad3d556d22936a2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Rose \u0026 the Dagger (The Wrath and the Dawn #2)",
+ "price": 58.64,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-rose-the-dagger-the-wrath-and-the-dawn-2_278/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/57/9c/579cd2ca789c8a796a1864d08ee8d686.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Road to Little Dribbling: Adventures of an American in Britain (Notes From a Small Island #2)",
+ "price": 23.21,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-road-to-little-dribbling-adventures-of-an-american-in-britain-notes-from-a-small-island-2_277/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e0/4f/e04f8eda2a2fa947aec17640202d9ab0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Rise of Theodore Roosevelt (Theodore Roosevelt #1)",
+ "price": 42.57,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-rise-of-theodore-roosevelt-theodore-roosevelt-1_276/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ff/d4/ffd45d95f314555e20c923d3522adea7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Restaurant at the End of the Universe (Hitchhiker\u0027s Guide to the Galaxy #2)",
+ "price": 10.92,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-restaurant-at-the-end-of-the-universe-hitchhikers-guide-to-the-galaxy-2_275/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b8/b2/b8b2956acc758a381beef87339c0a52f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Rest Is Noise: Listening to the Twentieth Century",
+ "price": 34.77,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-rest-is-noise-listening-to-the-twentieth-century_274/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4d/e1/4de1d174bf4ab498788c9488c9fd29fc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Red Tent",
+ "price": 35.66,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-red-tent_273/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b2/8f/b28f211e50e74445ca071d4279d1080d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Purpose Driven Life: What on Earth Am I Here for?",
+ "price": 37.19,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-purpose-driven-life-what-on-earth-am-i-here-for_272/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/95/08/9508e6b28fe4c63e67b3ef33f11eff98.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Purest Hook (Second Circle Tattoos #3)",
+ "price": 12.25,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-purest-hook-second-circle-tattoos-3_271/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/15/68/1568ef85fdb4e405b9f8bc62ef855c10.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Picture of Dorian Gray",
+ "price": 29.7,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-picture-of-dorian-gray_270/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a6/72/a67245346daa38c2b23a4fc64c6e7115.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Paris Wife",
+ "price": 36.8,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-paris-wife_269/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/01/c8/01c847671683538fcf084eede54d6270.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Obsession",
+ "price": 45.43,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-obsession_268/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/24/93/2493c74c614afcc435cc00e33bd55f64.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Nightingale",
+ "price": 26.26,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-nightingale_267/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/77/aa/77aa0ef1f62a0b0b40000a81f65c4e65.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The New Guy (and Other Senior Year Distractions)",
+ "price": 44.92,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-new-guy-and-other-senior-year-distractions_266/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d8/9d/d89dc869d5ea1462fd746ac6de97583f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Nanny Diaries (Nanny #1)",
+ "price": 52.53,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-nanny-diaries-nanny-1_265/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/63/5f/635fb981e464f7427787824b20a15e71.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Name of God is Mercy",
+ "price": 37.25,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-name-of-god-is-mercy_264/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d2/41/d241ca89679593a589a6614162ab6eb6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Maze Runner (The Maze Runner #1)",
+ "price": 20.93,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-maze-runner-the-maze-runner-1_263/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5e/87/5e87e44785de47c2a03091deaa82330f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Lover\u0027s Dictionary",
+ "price": 58.09,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-lovers-dictionary_262/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/47/e7/47e7563b0731a2b8131233f70d211f7a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Lonely Ones",
+ "price": 43.59,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-lonely-ones_261/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/21/bd/21bdf7ae21476b1debf4aa3eefe6f29d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Lean Startup: How Today\u0027s Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses",
+ "price": 33.92,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-lean-startup-how-todays-entrepreneurs-use-continuous-innovation-to-create-radically-successful-businesses_260/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/39/f1/39f167dff90d7f84f5c8dc5e05d4051b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Last Painting of Sara de Vos",
+ "price": 55.55,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-last-painting-of-sara-de-vos_259/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bf/fd/bffd473ab232c5f35e8c81bb927f1624.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Land of 10,000 Madonnas",
+ "price": 29.64,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-land-of-10000-madonnas_258/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ae/93/ae93b007df22c99ea2ff2f907b06663e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Infinities",
+ "price": 27.41,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-infinities_257/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9c/44/9c445b33d53b3810f1c12f4adad71a27.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Husband\u0027s Secret",
+ "price": 52.51,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-husbands-secret_256/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f0/5b/f05be79a4b319e24819c318e35e6963c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Hitchhiker\u0027s Guide to the Galaxy (Hitchhiker\u0027s Guide to the Galaxy #1)",
+ "price": 47.8,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-hitchhikers-guide-to-the-galaxy-hitchhikers-guide-to-the-galaxy-1_255/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/41/74/41747f533b211d324799a03dc64ed175.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Guns of August",
+ "price": 14.54,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-guns-of-august_254/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/06/c8/06c897070611b78b80a37333cbb7851c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Guernsey Literary and Potato Peel Pie Society",
+ "price": 49.53,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-guernsey-literary-and-potato-peel-pie-society_253/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/18/f7/18f7bf6366cd7a8b947fd790d808047b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Goldfinch",
+ "price": 43.58,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-goldfinch_252/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fb/4d/fb4dde3351d00ef104f29aeecd2d41fb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Giver (The Giver Quartet #1)",
+ "price": 12.3,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-giver-the-giver-quartet-1_251/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b3/ed/b3eda9490c9e2ed02c3a8650e687731b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Girl with All the Gifts",
+ "price": 49.47,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-girl-with-all-the-gifts_250/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/41/c7/41c74d82b853606fe98182c417b4669c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Girl Who Played with Fire (Millennium Trilogy #2)",
+ "price": 22.14,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-girl-who-played-with-fire-millennium-trilogy-2_249/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/11/71/117145e4525b2e801e2cd1ba4dd70441.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Girl Who Kicked the Hornet\u0027s Nest (Millennium Trilogy #3)",
+ "price": 57.48,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-girl-who-kicked-the-hornets-nest-millennium-trilogy-3_248/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2a/a2/2aa2d8c4a8bfc1972c806ca16718e5c5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Exiled",
+ "price": 43.45,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-exiled_247/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2d/1a/2d1aeb1cc8a23064164e230fa232cc04.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The End of Faith: Religion, Terror, and the Future of Reason",
+ "price": 22.13,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-end-of-faith-religion-terror-and-the-future-of-reason_246/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9d/56/9d5631724c6496b2f012fa5d2f2b6abd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Elegant Universe: Superstrings, Hidden Dimensions, and the Quest for the Ultimate Theory",
+ "price": 13.03,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-elegant-universe-superstrings-hidden-dimensions-and-the-quest-for-the-ultimate-theory_245/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/69/c8/69c83860995cde393dbe6690ec3f1d4f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Disappearing Spoon: And Other True Tales of Madness, Love, and the History of the World from the Periodic Table of the Elements",
+ "price": 57.35,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-disappearing-spoon-and-other-true-tales-of-madness-love-and-the-history-of-the-world-from-the-periodic-table-of-the-elements_244/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f9/69/f969969428b505970a46272fdcea00d3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Devil Wears Prada (The Devil Wears Prada #1)",
+ "price": 44.29,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-devil-wears-prada-the-devil-wears-prada-1_243/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/87/d3/87d34d376555dd0cb75030d1059cc144.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Demon-Haunted World: Science as a Candle in the Dark",
+ "price": 52.25,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-demon-haunted-world-science-as-a-candle-in-the-dark_242/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4a/35/4a352dc298e4bbe6ba5f81bbc0d41ca0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Day the Crayons Came Home (Crayons)",
+ "price": 26.33,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-day-the-crayons-came-home-crayons_241/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ec/08/ec08efebaa33a403e54080b48c139794.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Da Vinci Code (Robert Langdon #2)",
+ "price": 22.96,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-da-vinci-code-robert-langdon-2_240/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cf/d5/cfd553eaa00f4d6091c459081cd98199.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Cuckoo\u0027s Calling (Cormoran Strike #1)",
+ "price": 19.21,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-cuckoos-calling-cormoran-strike-1_239/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/11/81/11815f24d043f77d4f09a3522a688a5c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Complete Stories and Poems (The Works of Edgar Allan Poe [Cameo Edition])",
+ "price": 26.78,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-complete-stories-and-poems-the-works-of-edgar-allan-poe-cameo-edition_238/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/42/c4/42c48f11b7e70a0f76c5ba9cb5c5018a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Complete Poems",
+ "price": 41.32,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-complete-poems_237/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e5/f2/e5f270cf4a079a7d411439abe17691e0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The Catcher in the Rye",
+ "price": 24.55,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-catcher-in-the-rye_236/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/70/f4/70f4dbf8110363f4e7ef32db0ce2a675.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Cat in the Hat (Beginner Books B-1)",
+ "price": 16.26,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-cat-in-the-hat-beginner-books-b-1_235/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9b/f1/9bf106306301a44635aa7bd381c84e4d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Case for Christ (Cases for Christianity)",
+ "price": 47.84,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-case-for-christ-cases-for-christianity_234/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/12/3d/123d05986974943a58c5cfa518e11e6d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Book Thief",
+ "price": 53.49,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-book-thief_233/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ff/a0/ffa08bf29ae0a5c9e91564dba71cde90.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Book of Basketball: The NBA According to The Sports Guy",
+ "price": 44.84,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-book-of-basketball-the-nba-according-to-the-sports-guy_232/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/61/2c/612caeb0b2acb35c100629f0f52a40d7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Blind Side: Evolution of a Game",
+ "price": 53.71,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-blind-side-evolution-of-a-game_231/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5e/ee/5eeecab909b9e87ddfb6e3d31078fbbf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Autobiography of Malcolm X",
+ "price": 23.43,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-autobiography-of-malcolm-x_230/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/84/07/84074b59293cc5bf4012ef0f60e90c4f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Art of Simple Food: Notes, Lessons, and Recipes from a Delicious Revolution",
+ "price": 34.32,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-art-of-simple-food-notes-lessons-and-recipes-from-a-delicious-revolution_229/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/96/57/9657c6d89024e343879a7b5512474f1e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Art of Fielding",
+ "price": 22.1,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-art-of-fielding_228/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/68/a6/68a6112c857e595c684f2a1a3287ba16.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Surely You\u0027re Joking, Mr. Feynman!: Adventures of a Curious Character",
+ "price": 25.83,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/surely-youre-joking-mr-feynman-adventures-of-a-curious-character_227/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f8/bc/f8bcd489d33473e0819beaecccd5ebac.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Stiff: The Curious Lives of Human Cadavers",
+ "price": 36.74,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/stiff-the-curious-lives-of-human-cadavers_226/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a0/a0/a0a013b029130df92073f547df83ee5c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Spilled Milk: Based on a True Story",
+ "price": 49.51,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/spilled-milk-based-on-a-true-story_225/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a8/0d/a80d4310cab08a3660149fd3f2cf15c7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Something Borrowed (Darcy \u0026 Rachel #1)",
+ "price": 48.96,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/something-borrowed-darcy-rachel-1_224/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6d/6d/6d6d5799190b4f9ef89f3bbc8b67d60d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Something Blue (Darcy \u0026 Rachel #2)",
+ "price": 54.62,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/something-blue-darcy-rachel-2_223/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/72/f5/72f5ed312bc82afa386c9cd48d4e36dd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Soldier (Talon #3)",
+ "price": 24.72,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/soldier-talon-3_222/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7b/96/7b96f6e11b388ee800c7fd17fe479444.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Shopaholic \u0026 Baby (Shopaholic #5)",
+ "price": 46.45,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/shopaholic-baby-shopaholic-5_221/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f0/a4/f0a48c8cc6acd322eacd9d35e55d63e7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Seven Days in the Art World",
+ "price": 52.33,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/seven-days-in-the-art-world_220/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/35/2c/352c1a7e155c5d03d073bf8ce1564caa.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Seven Brief Lessons on Physics",
+ "price": 30.6,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/seven-brief-lessons-on-physics_219/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c8/63/c863c222c130a1bc8685a1242dd2523d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Scarlet (The Lunar Chronicles #2)",
+ "price": 14.57,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/scarlet-the-lunar-chronicles-2_218/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b6/5c/b65c3622c0da689990fd1d7f1a0b826c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Sarah\u0027s Key",
+ "price": 46.29,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/sarahs-key_217/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/95/b2/95b235aeeae2d1849b78562f36e10aec.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Saga, Volume 3 (Saga (Collected Editions) #3)",
+ "price": 21.57,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/saga-volume-3-saga-collected-editions-3_216/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d8/fd/d8fd30b3e5781e880a3efe4c9495b417.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Running with Scissors",
+ "price": 12.91,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/running-with-scissors_215/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/66/c7/66c7a1537c8901e1e4ec217d1956bae8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Rogue Lawyer (Rogue Lawyer #1)",
+ "price": 50.11,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/rogue-lawyer-rogue-lawyer-1_214/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/92/e4/92e4e180ba8fbde3b8ac0c1e71cfc5f4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Rise of the Rocket Girls: The Women Who Propelled Us, from Missiles to the Moon to Mars",
+ "price": 41.67,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/rise-of-the-rocket-girls-the-women-who-propelled-us-from-missiles-to-the-moon-to-mars_213/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/05/42/05428b0c7b79d0dbc521fd621e754083.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Rework",
+ "price": 44.88,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/rework_212/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/54/10/5410a58193e2373c04b3021ade78a82b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Reservations for Two",
+ "price": 11.1,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/reservations-for-two_211/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/39/a4/39a4d96a5bc75a34aae97676a4b854fa.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Red: The True Story of Red Riding Hood",
+ "price": 28.54,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/red-the-true-story-of-red-riding-hood_210/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/70/4e/704e81b05e56dd84ecf607ea283952db.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Ready Player One",
+ "price": 19.07,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/ready-player-one_209/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/51/34/513418bd1c6114f3ea1fd703278e20ef.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Quiet: The Power of Introverts in a World That Can\u0027t Stop Talking",
+ "price": 43.55,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/quiet-the-power-of-introverts-in-a-world-that-cant-stop-talking_208/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ee/3a/ee3aebe36d1d0fa11a95a07067294b8c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Prodigy: The Graphic Novel (Legend: The Graphic Novel #2)",
+ "price": 43.63,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/prodigy-the-graphic-novel-legend-the-graphic-novel-2_207/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c9/a5/c9a559e3ba407c1d70ebfc4e2f0d82db.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Persepolis: The Story of a Childhood (Persepolis #1-2)",
+ "price": 39.13,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/persepolis-the-story-of-a-childhood-persepolis-1-2_206/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/14/98/14987a55d9609e706d2619814e2a8b0a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Packing for Mars: The Curious Science of Life in the Void",
+ "price": 56.68,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/packing-for-mars-the-curious-science-of-life-in-the-void_205/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8d/72/8d7216b05e1b5edf9bdb0d2db295ca33.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Outliers: The Story of Success",
+ "price": 14.16,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/outliers-the-story-of-success_204/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/70/37/70372ab3240019fbe2de6cd407c98675.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Original Fake",
+ "price": 31.45,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/original-fake_203/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e7/29/e72934871f9b42a807d976670a446e12.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Orange Is the New Black",
+ "price": 24.61,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/orange-is-the-new-black_202/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d9/ea/d9ea34aea25469189bca07af6a18790a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "One for the Money (Stephanie Plum #1)",
+ "price": 32.87,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/one-for-the-money-stephanie-plum-1_201/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4e/52/4e52f087337abef25de62845f093ed6e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Notes from a Small Island (Notes From a Small Island #1)",
+ "price": 40.17,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/notes-from-a-small-island-notes-from-a-small-island-1_200/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/61/39/61393c43f7caaccaa07daccaa8530736.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Night (The Night Trilogy #1)",
+ "price": 13.51,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/night-the-night-trilogy-1_199/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e3/cc/e3ccf96311f9c1b9e9ecc80e16c05f4e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Neither Here nor There: Travels in Europe",
+ "price": 38.95,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/neither-here-nor-there-travels-in-europe_198/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/06/81/0681530a7bc301caf5c3257e1b0f0750.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Naked",
+ "price": 31.69,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/naked_197/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e7/12/e71268a559d73826aa64151d47357a12.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Morning Star (Red Rising #3)",
+ "price": 29.4,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/morning-star-red-rising-3_196/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b5/f0/b5f04530d0343e763a80ef3f2dbdb386.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Miracles from Heaven: A Little Girl, Her Journey to Heaven, and Her Amazing Story of Healing",
+ "price": 57.83,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/miracles-from-heaven-a-little-girl-her-journey-to-heaven-and-her-amazing-story-of-healing_195/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7c/8e/7c8ea0cef3825cc6ddae55267c55a59e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Midnight Riot (Peter Grant/ Rivers of London - books #1)",
+ "price": 55.46,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/midnight-riot-peter-grant-rivers-of-london-books-1_194/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e6/57/e6574a313ad7e6adf97a1d71318f9a7f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Me Talk Pretty One Day",
+ "price": 57.6,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/me-talk-pretty-one-day_193/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/98/9f/989fe700e9e6bdec4fc3217daa5b7df3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Manuscript Found in Accra",
+ "price": 34.98,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/manuscript-found-in-accra_192/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/26/b7/26b72a3c1cf2a8afdbe92fa1a1d78f41.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Lust \u0026 Wonder",
+ "price": 11.87,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/lust-wonder_191/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/61/ba/61ba5bc1ee3d8cb3dd350120ffa3f31e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Lila (Gilead #3)",
+ "price": 12.47,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/lila-gilead-3_190/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2b/99/2b99a765a013979637b4a6726bfb10f5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Life, the Universe and Everything (Hitchhiker\u0027s Guide to the Galaxy #3)",
+ "price": 33.26,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/life-the-universe-and-everything-hitchhikers-guide-to-the-galaxy-3_189/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ef/8b/ef8bc5adcd3bea8e8ba97be76d07a32a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Life Without a Recipe",
+ "price": 59.04,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/life-without-a-recipe_188/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/80/b3/80b3e38be4204b3b64cdbe8c80dcf1f9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Life After Life",
+ "price": 26.13,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/life-after-life_187/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/59/80/59803a88c2e5dd7a2e36de1d41f7f1ae.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Letter to a Christian Nation",
+ "price": 22.2,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/letter-to-a-christian-nation_186/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/74/c2/74c2893188f917409ba564d46f481f77.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Let\u0027s Pretend This Never Happened: A Mostly True Memoir",
+ "price": 45.11,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/lets-pretend-this-never-happened-a-mostly-true-memoir_185/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/78/e1/78e1b9ccc99ba11d78015f0a18f0b421.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Legend (Legend #1)",
+ "price": 43.69,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/legend-legend-1_184/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6c/6c/6c6c0984ab57d6b4f71d84dd0db0f65b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Lean In: Women, Work, and the Will to Lead",
+ "price": 25.02,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/lean-in-women-work-and-the-will-to-lead_183/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4f/e5/4fe55bc7134401f6db04f0775ead1d4c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Lamb: The Gospel According to Biff, Christ\u0027s Childhood Pal",
+ "price": 55.5,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/lamb-the-gospel-according-to-biff-christs-childhood-pal_182/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a1/03/a10370da29e4ba78c7a75a14041eae0e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Lady Renegades (Rebel Belle #3)",
+ "price": 53.04,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/lady-renegades-rebel-belle-3_181/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d2/c2/d2c259e13fe3097325549a14f996b462.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Jurassic Park (Jurassic Park #1)",
+ "price": 44.97,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/jurassic-park-jurassic-park-1_180/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9a/71/9a7160b396790bd4a351522278de4f8c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "It\u0027s Never Too Late to Begin Again: Discovering Creativity and Meaning at Midlife and Beyond",
+ "price": 42.38,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/its-never-too-late-to-begin-again-discovering-creativity-and-meaning-at-midlife-and-beyond_179/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fa/36/fa3659740e31eb57775cc2647654bf11.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Is Everyone Hanging Out Without Me? (And Other Concerns)",
+ "price": 20.11,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/is-everyone-hanging-out-without-me-and-other-concerns_178/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6b/94/6b94e98f822a42c03c4ff0b9cfdd6e0c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Into the Wild",
+ "price": 56.7,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/into-the-wild_177/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e2/ca/e2ca3b870db8071034edea19b1da3de2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Inferno (Robert Langdon #4)",
+ "price": 41.0,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/inferno-robert-langdon-4_176/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e3/11/e3111146083821b5a3670d869ab40d2a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "In the Garden of Beasts: Love, Terror, and an American Family in Hitler\u0027s Berlin",
+ "price": 28.85,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/in-the-garden-of-beasts-love-terror-and-an-american-family-in-hitlers-berlin_175/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/25/82/2582a9f11ad68a30e44cc0b459383474.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "If I Run (If I Run #1)",
+ "price": 49.97,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/if-i-run-if-i-run-1_174/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c3/d0/c3d0f2fb5cacbca64639a679b962e1b9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "I\u0027ve Got Your Number",
+ "price": 19.69,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/ive-got-your-number_173/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b2/df/b2df826432771838819db89c20e20609.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "I Am Malala: The Girl Who Stood Up for Education and Was Shot by the Taliban",
+ "price": 28.88,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/i-am-malala-the-girl-who-stood-up-for-education-and-was-shot-by-the-taliban_172/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/52/7a/527a7d3b9b4928c093cadd75661bf467.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Hungry Girl Clean \u0026 Hungry: Easy All-Natural Recipes for Healthy Eating in the Real World",
+ "price": 33.14,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/hungry-girl-clean-hungry-easy-all-natural-recipes-for-healthy-eating-in-the-real-world_171/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6f/c4/6fc450625cd672e871a6176f74909be2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "House of Lost Worlds: Dinosaurs, Dynasties, and the Story of Life on Earth",
+ "price": 43.7,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/house-of-lost-worlds-dinosaurs-dynasties-and-the-story-of-life-on-earth_170/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/43/fd/43fda1db93163d67705264dcfa98aaa5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "House of Leaves",
+ "price": 54.89,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/house-of-leaves_169/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/14/25/142563ccee483bc07632f9c083a68326.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Horrible Bear!",
+ "price": 37.52,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/horrible-bear_168/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d2/63/d26337dee5c0b13b56b7aea59d611570.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Holidays on Ice",
+ "price": 51.07,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/holidays-on-ice_167/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4b/9a/4b9a2a6d4c995e12fe216f6173a582be.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Heir to the Sky",
+ "price": 44.07,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/heir-to-the-sky_166/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6d/b1/6db1568e09d10652593638a5f85e7202.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Green Eggs and Ham (Beginner Books B-16)",
+ "price": 10.79,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/green-eggs-and-ham-beginner-books-b-16_165/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3a/0e/3a0e75e4f758f90a80965869afbe41b4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Grayson, Vol 3: Nemesis (Grayson #3)",
+ "price": 42.72,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/grayson-vol-3-nemesis-grayson-3_164/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f9/4c/f94cfc3c82abb799568d1ea029b1d3d1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Gratitude",
+ "price": 26.66,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/gratitude_163/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/07/b6/07b673e7d367a5e89418bd513a8d5e72.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Gone Girl",
+ "price": 37.6,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/gone-girl_162/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/24/ad/24ad42075b1aa1403aef934c29c1e8ba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Golden (Heart of Dread #3)",
+ "price": 42.21,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/golden-heart-of-dread-3_161/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/39/2f/392fedbcda7bf8f968d5e6643ea5545f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Girl in the Blue Coat",
+ "price": 46.83,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/girl-in-the-blue-coat_160/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bf/7a/bf7a5bc1d1ebac5e9b6fbb147828a123.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Fruits Basket, Vol. 3 (Fruits Basket #3)",
+ "price": 45.17,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/fruits-basket-vol-3-fruits-basket-3_159/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7b/e7/7be75475a916d6df4edebfc5fe36c3f9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Friday Night Lights: A Town, a Team, and a Dream",
+ "price": 51.22,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/friday-night-lights-a-town-a-team-and-a-dream_158/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7d/cf/7dcf6c3b419bf7e7e3b3b8162b177869.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Fire Bound (Sea Haven/Sisters of the Heart #5)",
+ "price": 21.28,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/fire-bound-sea-havensisters-of-the-heart-5_157/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cd/53/cd53431a069ee01572988de29ef68da5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Fifty Shades Freed (Fifty Shades #3)",
+ "price": 15.36,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/fifty-shades-freed-fifty-shades-3_156/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/18/d8/18d8e02c75c2ef23556c9746fae57e43.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Fellside",
+ "price": 38.62,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/fellside_155/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f4/8f/f48f179d6bda290b66b2d165e0a419e6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Extreme Prey (Lucas Davenport #26)",
+ "price": 25.4,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/extreme-prey-lucas-davenport-26_154/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/de/86/de86d4f1563fad2ca088922fbbb2b36a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Eragon (The Inheritance Cycle #1)",
+ "price": 43.87,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/eragon-the-inheritance-cycle-1_153/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2d/62/2d625f26cb3bbeef851221f125b81daf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Eclipse (Twilight #3)",
+ "price": 18.74,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/eclipse-twilight-3_152/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/05/f8/05f833af99c37decb506e34e36f5cdaf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Dune (Dune #1)",
+ "price": 54.86,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/dune-dune-1_151/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7a/bc/7abccb865ecf9b0f676800b10c71cfd6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Dracula",
+ "price": 52.62,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/dracula_150/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ef/d7/efd7c316b4d60a403ba6d111fdeb2d41.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Do Androids Dream of Electric Sheep? (Blade Runner #1)",
+ "price": 51.48,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/do-androids-dream-of-electric-sheep-blade-runner-1_149/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fa/65/fa653fbe3a4c69227c9b79d471cee576.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Disrupted: My Misadventure in the Start-Up Bubble",
+ "price": 15.28,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/disrupted-my-misadventure-in-the-start-up-bubble_148/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2c/32/2c32dd01215c98fc1f6b176b6a9b3ece.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Dead Wake: The Last Crossing of the Lusitania",
+ "price": 39.24,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/dead-wake-the-last-crossing-of-the-lusitania_147/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/69/0e/690ee5b7ef94ea460861eee2e67fd787.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "David and Goliath: Underdogs, Misfits, and the Art of Battling Giants",
+ "price": 17.81,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/david-and-goliath-underdogs-misfits-and-the-art-of-battling-giants_146/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/df/95/df9520adbabbb17f22fcb3f49c69640f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Darkfever (Fever #1)",
+ "price": 56.02,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/darkfever-fever-1_145/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/af/08/af08d08c90b4df63ca5a2819a754da18.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Dark Places",
+ "price": 23.9,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/dark-places_144/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/51/bf/51bf575f9af355f4f9f98abe8986402a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Crazy Rich Asians (Crazy Rich Asians #1)",
+ "price": 49.13,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/crazy-rich-asians-crazy-rich-asians-1_143/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9a/62/9a621372fed3a80015283013d8a452cd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Counting Thyme",
+ "price": 10.62,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/counting-thyme_142/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e0/ae/e0ae97753a73b88b61b13b19977613dc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Cosmos",
+ "price": 36.17,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/cosmos_141/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/65/7b/657b1d20ea50775c5c87e039ed8aeebc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Civilization and Its Discontents",
+ "price": 59.95,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/civilization-and-its-discontents_140/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4d/a6/4da6939a6bbd895a5acdeabad46d1f9f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Cinder (The Lunar Chronicles #1)",
+ "price": 26.09,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/cinder-the-lunar-chronicles-1_139/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4e/d2/4ed2ec75df84ba1093fc4141b29abab3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Catastrophic Happiness: Finding Joy in Childhood\u0027s Messy Years",
+ "price": 37.35,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/catastrophic-happiness-finding-joy-in-childhoods-messy-years_138/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7d/0b/7d0bb832760e81c281d8d283ba6a2b09.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Career of Evil (Cormoran Strike #3)",
+ "price": 24.72,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/career-of-evil-cormoran-strike-3_137/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9e/ff/9eff8b66d583e8f0ba58a0bc86de40f2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Breaking Dawn (Twilight #4)",
+ "price": 35.28,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/breaking-dawn-twilight-4_136/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ce/24/ce242d3eb00bf1938d6c18e0261ef868.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Brave Enough",
+ "price": 51.32,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/brave-enough_135/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/94/c7/94c7add56827e01998189a021ec060e2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Boy Meets Boy",
+ "price": 21.12,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/boy-meets-boy_134/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0b/ac/0baceb72d202880d1441a32193df6e11.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Born to Run: A Hidden Tribe, Superathletes, and the Greatest Race the World Has Never Seen",
+ "price": 27.35,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/born-to-run-a-hidden-tribe-superathletes-and-the-greatest-race-the-world-has-never-seen_133/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ea/ee/eaee98b302dcaf91d1122816ae553295.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Blink: The Power of Thinking Without Thinking",
+ "price": 21.74,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/blink-the-power-of-thinking-without-thinking_132/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5d/41/5d415bc31b1f856a2a9dc8706fd19abd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Black Flags: The Rise of ISIS",
+ "price": 40.87,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/black-flags-the-rise-of-isis_131/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/48/5d/485d2c4cedd639fcb005340a8d589bb3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Black Butler, Vol. 1 (Black Butler #1)",
+ "price": 49.31,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/black-butler-vol-1-black-butler-1_130/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/99/48/9948564dec3ac2f9e32419911b181e37.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Big Little Lies",
+ "price": 22.11,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/big-little-lies_129/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ef/b7/efb72b546fc7cab4ba1735b4b82c5851.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Between Shades of Gray",
+ "price": 20.79,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/between-shades-of-gray_128/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f9/19/f919f64fc0e3642cdc604134bfd93774.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Best of My Love (Fool\u0027s Gold #20)",
+ "price": 27.41,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/best-of-my-love-fools-gold-20_127/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/06/8c/068ccab8875670fccb8b72234370d16f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Beowulf",
+ "price": 38.35,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/beowulf_126/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/dd/6e/dd6e7b84e99f3b4b5655ea0db74af2b4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Beautiful Creatures (Caster Chronicles #1)",
+ "price": 21.55,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/beautiful-creatures-caster-chronicles-1_125/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/82/06/8206f351bd1ff6f52eed515a3b366916.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Awkward",
+ "price": 38.02,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/awkward_124/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/41/72/417255e608c389aedfb68491dae92c9c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Ash",
+ "price": 22.06,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/ash_123/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d7/f0/d7f00033bda3779b2fd017e32e7c800c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Are We There Yet?",
+ "price": 10.66,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/are-we-there-yet_122/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f8/be/f8be3238a1cf039a3e7d50de1d4c2cfd.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Are We Smart Enough to Know How Smart Animals Are?",
+ "price": 56.58,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/are-we-smart-enough-to-know-how-smart-animals-are_121/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/71/d1/71d199b2abd878b9943dc818b77a1e72.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Annie on My Mind",
+ "price": 36.83,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/annie-on-my-mind_120/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/88/ba/88baf408218bf1e31626211da4329c6b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "And Then There Were None",
+ "price": 35.01,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/and-then-there-were-none_119/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/21/bf/21bf2eb0bff3134837def8bd40845ba0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "A Walk in the Woods: Rediscovering America on the Appalachian Trail",
+ "price": 30.48,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/a-walk-in-the-woods-rediscovering-america-on-the-appalachian-trail_118/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/25/ff/25ffbe6f0e8961a1cb2ace38a5b02279.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "A Visit from the Goon Squad",
+ "price": 14.08,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-visit-from-the-goon-squad_117/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/92/02/9202adfd4bc39e4058c5b9e851ffbf5a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "A Storm of Swords (A Song of Ice and Fire #3)",
+ "price": 31.22,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/a-storm-of-swords-a-song-of-ice-and-fire-3_116/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/39/83/3983449f17095ed15a4878d6bc8114c9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "A Heartbreaking Work of Staggering Genius",
+ "price": 54.29,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-heartbreaking-work-of-staggering-genius_115/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7a/58/7a587c5814f33c0c54e8bfa0ef66d690.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "8 Keys to Mental Health Through Exercise",
+ "price": 31.04,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/8-keys-to-mental-health-through-exercise_114/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b8/44/b844a77409f1d53cbb66148820abc217.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "#GIRLBOSS",
+ "price": 50.96,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/girlboss_113/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/70/9a/709a7625e50abf3fc3f26c0396a62131.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Suffragettes (Little Black Classics, #96)",
+ "price": 11.89,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-suffragettes-little-black-classics-96_112/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ee/c3/eec3857d573218bfd22b23b80bfe740e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Sense of an Ending",
+ "price": 31.38,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-sense-of-an-ending_111/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/75/46/7546899e546c4aa11b501c0c41060727.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Sandman, Vol. 2: The Doll\u0027s House (The Sandman (volumes) #2)",
+ "price": 54.81,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-sandman-vol-2-the-dolls-house-the-sandman-volumes-2_110/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e3/ae/e3ae48fe07d77611b49b5b78d99418ae.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Course of Love",
+ "price": 16.78,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-course-of-love_109/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f2/c9/f2c952cfbce6ab5d8400a0bb8ee4eb5c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Sugar Rush (Offensive Line #2)",
+ "price": 24.42,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/sugar-rush-offensive-line-2_108/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c3/a9/c3a90a5baa833a37c29c4b03a444737c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Saga, Volume 2 (Saga (Collected Editions) #2)",
+ "price": 11.75,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/saga-volume-2-saga-collected-editions-2_107/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1a/eb/1aeb5d30809ad96d7c323228a2bd23d3.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Run, Spot, Run: The Ethics of Keeping Pets",
+ "price": 20.02,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/run-spot-run-the-ethics-of-keeping-pets_106/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/91/e6/91e6190dcdd7d6cdeb94a82b60917ec4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "New Moon (Twilight #2)",
+ "price": 12.86,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/new-moon-twilight-2_105/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5a/1f/5a1fa3ec68add137878b42243813263d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Life",
+ "price": 31.58,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/life_104/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/99/97/9997eda658c2fe50e724171f9c2a2b0b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Kindle Paperwhite User\u0027s Guide",
+ "price": 34.0,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/kindle-paperwhite-users-guide_103/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3e/49/3e49769bf9bf83d3bb25c6f93a7fcca2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "H is for Hawk",
+ "price": 57.42,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/h-is-for-hawk_102/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/78/3c/783c89d21306b712d832dbac267b786a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Girl Online On Tour (Girl Online #2)",
+ "price": 53.47,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/girl-online-on-tour-girl-online-2_101/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e0/22/e0221ab11b1d093a2d03927b4962c544.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Fruits Basket, Vol. 2 (Fruits Basket #2)",
+ "price": 11.64,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/fruits-basket-vol-2-fruits-basket-2_100/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/e9/fb/e9fb3236b73384253144f89b6eec6a68.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Diary of a Minecraft Zombie Book 1: A Scare of a Dare (An Unofficial Minecraft Book)",
+ "price": 52.88,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/diary-of-a-minecraft-zombie-book-1-a-scare-of-a-dare-an-unofficial-minecraft-book_99/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/47/16/47160ff71abe23cb52968b3d1b9b7988.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Y: The Last Man, Vol. 1: Unmanned (Y: The Last Man #1)",
+ "price": 18.51,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/y-the-last-man-vol-1-unmanned-y-the-last-man-1_98/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ae/16/ae169bb5ae814e0fb900cdf9e99332a7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "While You Were Mine",
+ "price": 41.32,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/while-you-were-mine_97/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/45/e8/45e87bcad554d79eadf0f89df9cac6f9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Where Lightning Strikes (Bleeding Stars #3)",
+ "price": 39.77,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/where-lightning-strikes-bleeding-stars-3_96/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/73/d9/73d948af3f2adb6dd693ff4bd43e7760.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "When I\u0027m Gone",
+ "price": 51.96,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/when-im-gone_95/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/13/a3/13a361d57f2b6021b2ae395a6fedd475.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Ways of Seeing",
+ "price": 39.51,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/ways-of-seeing_94/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a8/3a/a83a4d31d30dc3cb26a29899a5c3b91d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Vampire Knight, Vol. 1 (Vampire Knight #1)",
+ "price": 15.4,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/vampire-knight-vol-1-vampire-knight-1_93/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4b/97/4b972f89c11900ac0e84726d1f07bfcc.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Vampire Girl (Vampire Girl #1)",
+ "price": 53.82,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/vampire-girl-vampire-girl-1_92/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ea/55/ea5547a00ad163902faba6929369bc77.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Twenty Love Poems and a Song of Despair",
+ "price": 30.95,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/twenty-love-poems-and-a-song-of-despair_91/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/df/ab/dfab1d94f9190df7c13b63a093a6d16e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Travels with Charley: In Search of America",
+ "price": 57.82,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/travels-with-charley-in-search-of-america_90/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ff/60/ff60e98e3da9c76d6f65b26bd7142d94.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Three Wishes (River of Time: California #1)",
+ "price": 44.18,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/three-wishes-river-of-time-california-1_89/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c7/21/c721943edf481cad5ab32505e2ad3865.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "This One Moment (Pushing Limits #1)",
+ "price": 48.71,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/this-one-moment-pushing-limits-1_88/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9b/06/9b061431c4fbb98cc18068a523a49988.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Zombie Room",
+ "price": 19.69,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-zombie-room_87/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1a/2d/1a2d5e478c6b33738ff17e7acfbd8b66.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Wicked + The Divine, Vol. 1: The Faust Act (The Wicked + The Divine)",
+ "price": 36.52,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-wicked-the-divine-vol-1-the-faust-act-the-wicked-the-divine_86/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/64/75/64752f8cdae54b164fb81bfd81accd55.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Tumor",
+ "price": 41.56,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-tumor_85/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/db/f4/dbf4f5d4e7c0364b078aa5ce7e196853.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The Story of Hong Gildong",
+ "price": 43.19,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-story-of-hong-gildong_84/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ab/16/ab16eb035cc58809a73c4699477de9cb.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Silent Wife",
+ "price": 12.34,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-silent-wife_83/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9b/a3/9ba37429e4a2307fe0b2f4f4162dd636.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Silent Twin (Detective Jennifer Knight #3)",
+ "price": 36.25,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-silent-twin-detective-jennifer-knight-3_82/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a0/7b/a07b53e1708f9055145aa1ec3af8608d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Selfish Gene",
+ "price": 29.45,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-selfish-gene_81/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/08/14/0814f26516fb72b7391d0a742b5928a2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Secret Healer",
+ "price": 34.56,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-secret-healer_80/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/69/d2/69d225899cce0a150c605ead01e02f60.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Sandman, Vol. 1: Preludes and Nocturnes (The Sandman (volumes) #1)",
+ "price": 54.12,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-sandman-vol-1-preludes-and-nocturnes-the-sandman-volumes-1_79/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/56/ea/56eac75378feb4cab0dcb9d2101cf58b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Republic",
+ "price": 33.78,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-republic_78/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7b/2c/7b2cb77c4608fce189caebaa842e135d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "The Odyssey",
+ "price": 29.64,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-odyssey_77/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0d/e8/0de8211253c4131e0caf9e8528d99443.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "The No. 1 Ladies\u0027 Detective Agency (No. 1 Ladies\u0027 Detective Agency #1)",
+ "price": 57.7,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-no-1-ladies-detective-agency-no-1-ladies-detective-agency-1_76/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/34/2e/342ec55d460f3dd49d77dac2bd4ff489.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "The Nicomachean Ethics",
+ "price": 36.34,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-nicomachean-ethics_75/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f0/aa/f0aa9ae0319b1d6e0706e6053020e696.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "The Name of the Wind (The Kingkiller Chronicle #1)",
+ "price": 50.59,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-name-of-the-wind-the-kingkiller-chronicle-1_74/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6a/b3/6ab3616e7495ef64b1546a178cf8a9e7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "The Mirror \u0026 the Maze (The Wrath and the Dawn #1.5)",
+ "price": 29.38,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-mirror-the-maze-the-wrath-and-the-dawn-15_73/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/84/a8/84a85a5ecca2bdc17e219241938ebdba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "The Little Prince",
+ "price": 45.42,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-little-prince_72/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c0/78/c078355608dd81c7c5e4f5e1c5f73d23.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "The Light of the Fireflies",
+ "price": 54.43,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-light-of-the-fireflies_71/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/17/8e/178e6e1cee8e5980e31148ea10a7321f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "The Last Girl (The Dominion Trilogy #1)",
+ "price": 36.26,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/the-last-girl-the-dominion-trilogy-1_70/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/da/47/da4746e620f8ccd7cf20628d1a5e535a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "The Iliad",
+ "price": 16.16,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-iliad_69/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b4/49/b449e504e387b69322d85e76a57ab60f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "The Hook Up (Game On #1)",
+ "price": 36.29,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-hook-up-game-on-1_68/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/38/f1/38f1543cd2d51c2728678f5ecc128958.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "The Haters",
+ "price": 27.89,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-haters_67/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4c/e9/4ce9f937ac784ae0b377bcbf2a38a8b2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "The Girl You Lost",
+ "price": 12.29,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/the-girl-you-lost_66/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/90/0d/900dba6987796f4312a6a6737b0ea94d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "The Girl In The Ice (DCI Erika Foster #1)",
+ "price": 15.85,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-girl-in-the-ice-dci-erika-foster-1_65/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d8/f7/d8f77fe7f4bb8610e903741441f84702.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "The End of the Jesus Era (An Investigation #1)",
+ "price": 14.4,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/the-end-of-the-jesus-era-an-investigation-1_64/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fe/47/fe47782c4f8194a4d93ec1381108be88.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "The Edge of Reason (Bridget Jones #2)",
+ "price": 19.18,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-edge-of-reason-bridget-jones-2_63/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/db/34/db341aa83daa76cd9f9bd2c86ccb5dba.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "The Complete Maus (Maus #1-2)",
+ "price": 10.64,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-complete-maus-maus-1-2_62/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a6/f8/a6f889e0ba02be31875d3a324090ef5e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "The Communist Manifesto",
+ "price": 14.76,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-communist-manifesto_61/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/bb/cd/bbcd1a94ebc9fb56f8d079df4557f8e2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "The Bhagavad Gita",
+ "price": 57.49,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-bhagavad-gita_60/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/4e/69/4e69dacc99de838814d0f65c94e67f6c.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "The Bette Davis Club",
+ "price": 30.66,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/the-bette-davis-club_59/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/23/08/2308bf77130cf0a917642d82dbf4be05.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "The Art of Not Breathing",
+ "price": 40.83,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/the-art-of-not-breathing_58/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/37/26/3726bb1bf30241b6d6f8c8488ad70989.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Taking Shots (Assassins #1)",
+ "price": 18.88,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/taking-shots-assassins-1_57/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ea/92/ea92404bce04a4bc76f3ed9c5344b2bf.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Starlark",
+ "price": 25.83,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/starlark_56/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b4/9e/b49e66e8f446d9a3dae488955f2aa487.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Skip Beat!, Vol. 01 (Skip Beat! #1)",
+ "price": 42.12,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/skip-beat-vol-01-skip-beat-1_55/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6c/60/6c607509837e2b362ffd7c0e15e7b1f9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Sister Sable (The Mad Queen #1)",
+ "price": 13.33,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/sister-sable-the-mad-queen-1_54/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2c/89/2c89c4c5528ab4b9101701437953df75.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Shatter Me (Shatter Me #1)",
+ "price": 42.4,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/shatter-me-shatter-me-1_53/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f0/31/f031254cafbdff0092c76c8dcba24139.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Shameless",
+ "price": 58.35,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/shameless_52/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a2/19/a2198abf12e3287f84997b35f4e1050e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Shadow Rites (Jane Yellowrock #10)",
+ "price": 21.72,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/shadow-rites-jane-yellowrock-10_51/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7a/0d/7a0d52ec06a57c117c0b99c7980756e7.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Settling the Score (The Summer Games #1)",
+ "price": 44.91,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/settling-the-score-the-summer-games-1_50/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/9b/4e/9b4ece2ab5a6335c8594c878e2f22df1.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Sense and Sensibility",
+ "price": 37.46,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/sense-and-sensibility_49/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7d/53/7d53e2264b9647ee307259be9f73585d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Saga, Volume 1 (Saga (Collected Editions) #1)",
+ "price": 28.48,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/saga-volume-1-saga-collected-editions-1_48/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/c6/ca/c6cab3f679acb45fd2eba092ec9f6a2a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Rhythm, Chord \u0026 Malykhin",
+ "price": 28.34,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/rhythm-chord-malykhin_47/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/43/85/4385ee0304bc3546f2b6eaa75c46d4f8.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Rat Queens, Vol. 1: Sass \u0026 Sorcery (Rat Queens (Collected Editions) #1-5)",
+ "price": 46.96,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/rat-queens-vol-1-sass-sorcery-rat-queens-collected-editions-1-5_46/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0d/22/0d22f9ee696b7443d1573e7752645c6d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Paradise Lost (Paradise #1)",
+ "price": 24.96,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/paradise-lost-paradise-1_45/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/66/f9/66f9edebe41032584e08dcf2fc27b8b4.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Paper Girls, Vol. 1 (Paper Girls #1-5)",
+ "price": 21.71,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/paper-girls-vol-1-paper-girls-1-5_44/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/87/2b/872ba3b06a97e6662770bc2152595b84.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Ouran High School Host Club, Vol. 1 (Ouran High School Host Club #1)",
+ "price": 29.87,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/ouran-high-school-host-club-vol-1-ouran-high-school-host-club-1_43/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d5/c5/d5c5a6ebf05b68bee78a38a8ea62305d.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Origins (Alphas 0.5)",
+ "price": 28.99,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/origins-alphas-05_42/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/12/9b/129b70d7b45d78a26459e7445e0e13e2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "One Second (Seven #7)",
+ "price": 52.94,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/one-second-seven-7_41/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/3f/f3/3ff3f7a0f3c949bb7adbe5f7fe80b9ab.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "On the Road (Duluoz Legend)",
+ "price": 32.36,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/on-the-road-duluoz-legend_40/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/b8/3e/b83e5f1b9c1dcfe0ef05cff4b080e0fa.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Old Records Never Die: One Man\u0027s Quest for His Vinyl and His Past",
+ "price": 55.66,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/old-records-never-die-one-mans-quest-for-his-vinyl-and-his-past_39/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7e/94/7e947f3dd04f178175b85123829467a9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Off Sides (Off #1)",
+ "price": 39.45,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/off-sides-off-1_38/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/03/ed/03ed67ea504353b91b035151d8e80db2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Of Mice and Men",
+ "price": 47.11,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/of-mice-and-men_37/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0f/ca/0fca4597765ffacdb7bd529fc5eb88fa.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Myriad (Prentor #1)",
+ "price": 58.75,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/myriad-prentor-1_36/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/6b/fa/6bfae8a489ff53f50467705c1e6fff19.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "My Perfect Mistake (Over the Top #1)",
+ "price": 38.92,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/my-perfect-mistake-over-the-top-1_35/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0d/03/0d03eb55ed070a53b6c4b6eedd48b458.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Ms. Marvel, Vol. 1: No Normal (Ms. Marvel (2014-2015) #1)",
+ "price": 39.39,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/ms-marvel-vol-1-no-normal-ms-marvel-2014-2015-1_34/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f4/96/f496db4d78639e233978ae2bee021752.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Meditations",
+ "price": 25.89,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/meditations_33/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/df/c9/dfc9ed72e963572d23233b3a8cb01676.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Matilda",
+ "price": 28.34,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/matilda_32/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/03/47/0347bd215f4813edd81c2cd76bab53ca.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Lost Among the Living",
+ "price": 27.7,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/lost-among-the-living_31/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5a/40/5a40d914bc3491e5909f1167f9cb34f2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Lord of the Flies",
+ "price": 24.89,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/lord-of-the-flies_30/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/33/73/3373a168b588e3fb19c558a21da71ac9.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Listen to Me (Fusion #1)",
+ "price": 58.99,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/listen-to-me-fusion-1_29/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/00/dd/00dd43f59d255cbc16e9d9c9ed20a997.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Kitchens of the Great Midwest",
+ "price": 57.2,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/kitchens-of-the-great-midwest_28/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/5e/37/5e379c1cc7003127bc74257a1b721540.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Jane Eyre",
+ "price": 38.43,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/jane-eyre_27/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0b/9b/0b9bd2c1de5ec402b2c797b53e5257f6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Imperfect Harmony",
+ "price": 34.74,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/imperfect-harmony_26/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/fb/29/fb299a516730a2f2602b10f945f7a8e5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Icing (Aces Hockey #2)",
+ "price": 40.44,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/icing-aces-hockey-2_25/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/8d/1e/8d1e285bf672b2ea66879490cc5f6904.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Hawkeye, Vol. 1: My Life as a Weapon (Hawkeye #1)",
+ "price": 45.24,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/hawkeye-vol-1-my-life-as-a-weapon-hawkeye-1_24/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/16/46/16460146a1a8b99c82da027368383ade.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "Having the Barbarian\u0027s Baby (Ice Planet Barbarians #7.5)",
+ "price": 34.96,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/having-the-barbarians-baby-ice-planet-barbarians-75_23/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/f4/83/f4835e9f3fdd8b8107bbb39a391654f0.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "Giant Days, Vol. 1 (Giant Days #1-4)",
+ "price": 56.76,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/giant-days-vol-1-giant-days-1-4_22/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/35/0b/350b1224dc46533851d5a34134e44842.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "Fruits Basket, Vol. 1 (Fruits Basket #1)",
+ "price": 40.28,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/fruits-basket-vol-1-fruits-basket-1_21/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7c/c1/7cc13a8fb238202250e87843c1a62f94.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 1,
+ "title": "Frankenstein",
+ "price": 38.0,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/frankenstein_20/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/00/25/0025515e987a1ebd648773f9ac70bfe6.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 2,
+ "title": "Forever Rockers (The Rocker #12)",
+ "price": 28.8,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/forever-rockers-the-rocker-12_19/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/7f/b0/7fb03a053c270000667a50dd8d594843.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 3,
+ "title": "Fighting Fate (Fighting #6)",
+ "price": 39.24,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/fighting-fate-fighting-6_18/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/57/e2/57e255929f6e597c18cb3843904cd92b.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 4,
+ "title": "Emma",
+ "price": 32.93,
+ "rating": 2.0,
+ "url": "https://books.toscrape.com/emma_17/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/09/63/09638baaef52f03827c215029c632a13.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 5,
+ "title": "Eat, Pray, Love",
+ "price": 51.32,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/eat-pray-love_16/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/21/95/2195c296e82620593a143356aeaa7745.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 6,
+ "title": "Deep Under (Walker Security #1)",
+ "price": 47.09,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/deep-under-walker-security-1_15/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/74/e4/74e4ec43c40926c7b57fc0fe0f397183.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 7,
+ "title": "Choosing Our Religion: The Spiritual Lives of America\u0027s Nones",
+ "price": 28.42,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/choosing-our-religion-the-spiritual-lives-of-americas-nones_14/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/df/ab/dfabeab158046237ddb6b713b794909f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 8,
+ "title": "Charlie and the Chocolate Factory (Charlie Bucket #1)",
+ "price": 22.85,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/charlie-and-the-chocolate-factory-charlie-bucket-1_13/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d6/cc/d6cc0c66e34dfc214b406208bbaf18e2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 9,
+ "title": "Charity\u0027s Cross (Charles Towne Belles #4)",
+ "price": 41.24,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/charitys-cross-charles-towne-belles-4_12/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/39/e0/39e008f84bbd24b49a7532c2024b855e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 10,
+ "title": "Bright Lines",
+ "price": 39.07,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/bright-lines_11/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/12/43/1243e7eb614f57f0e4cfee80553fa312.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 11,
+ "title": "Bridget Jones\u0027s Diary (Bridget Jones #1)",
+ "price": 29.82,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/bridget-joness-diary-bridget-jones-1_10/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/0c/32/0c329cbd2adf4e0dc825f892106673b2.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 12,
+ "title": "Bounty (Colorado Mountain #7)",
+ "price": 37.26,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/bounty-colorado-mountain-7_9/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/80/ff/80ff924ed78cd7c5172410d0d92f8dfe.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 13,
+ "title": "Blood Defense (Samantha Brinkman #1)",
+ "price": 20.3,
+ "rating": 3.0,
+ "url": "https://books.toscrape.com/blood-defense-samantha-brinkman-1_8/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/cb/f6/cbf6d4b61953f29d7eedd2c9e01a9d74.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 14,
+ "title": "Bleach, Vol. 1: Strawberry and the Soul Reapers (Bleach #1)",
+ "price": 34.65,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/bleach-vol-1-strawberry-and-the-soul-reapers-bleach-1_7/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/a8/38/a8383903c98af18b898b9d70d5be2c16.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 15,
+ "title": "Beyond Good and Evil",
+ "price": 43.38,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/beyond-good-and-evil_6/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/ab/45/ab45f300aa15066ad1260d6f1398d03e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 16,
+ "title": "Alice in Wonderland (Alice\u0027s Adventures in Wonderland #1)",
+ "price": 55.53,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/alice-in-wonderland-alices-adventures-in-wonderland-1_5/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/96/ee/96ee77d71a31b7694dac6855f6affe4e.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 17,
+ "title": "Ajin: Demi-Human, Volume 1 (Ajin: Demi-Human #1)",
+ "price": 57.06,
+ "rating": 4.0,
+ "url": "https://books.toscrape.com/ajin-demi-human-volume-1-ajin-demi-human-1_4/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/09/7c/097cb5ecc6fb3fbe1690cf0cbdea4ac5.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 18,
+ "title": "A Spy\u0027s Devotion (The Regency Spies of London #1)",
+ "price": 16.97,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/a-spys-devotion-the-regency-spies-of-london-1_3/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/1b/5f/1b5ff86f3c75e51e24c573d3f8bffd8f.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 19,
+ "title": "1st to Die (Women\u0027s Murder Club #1)",
+ "price": 53.98,
+ "rating": 1.0,
+ "url": "https://books.toscrape.com/1st-to-die-womens-murder-club-1_2/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/2b/41/2b4161c5b72a4ae386b644682361b34a.jpg"
+ },
+ {
+ "source": "BooksToScrape",
+ "rank": 20,
+ "title": "1,000 Places to See Before You Die",
+ "price": 26.08,
+ "rating": 5.0,
+ "url": "https://books.toscrape.com/1000-places-to-see-before-you-die_1/index.html",
+ "imageUrl": "https://books.toscrape.com/media/cache/d7/0f/d70f7edd92705c45a82118c3ff6c299d.jpg"
+ }
+]
\ No newline at end of file
diff --git a/project/output/BooksToScrape_20260531_233112.txt b/project/output/BooksToScrape_20260531_233112.txt
new file mode 100644
index 0000000..ef9fa63
--- /dev/null
+++ b/project/output/BooksToScrape_20260531_233112.txt
@@ -0,0 +1,5006 @@
+==========================================
+ 数据来源: BooksToScrape
+ 爬取时间: 2026-05-31T23:31:12.602668700
+ 图书数量: 1000
+==========================================
+
+排名: 1
+书名: A Light in the Attic
+评分: 3.0
+价格: 51.77
+------------------------------------------
+排名: 2
+书名: Tipping the Velvet
+评分: 1.0
+价格: 53.74
+------------------------------------------
+排名: 3
+书名: Soumission
+评分: 1.0
+价格: 50.10
+------------------------------------------
+排名: 4
+书名: Sharp Objects
+评分: 4.0
+价格: 47.82
+------------------------------------------
+排名: 5
+书名: Sapiens: A Brief History of Humankind
+评分: 5.0
+价格: 54.23
+------------------------------------------
+排名: 6
+书名: The Requiem Red
+评分: 1.0
+价格: 22.65
+------------------------------------------
+排名: 7
+书名: The Dirty Little Secrets of Getting Your Dream Job
+评分: 4.0
+价格: 33.34
+------------------------------------------
+排名: 8
+书名: The Coming Woman: A Novel Based on the Life of the Infamous Feminist, Victoria Woodhull
+评分: 3.0
+价格: 17.93
+------------------------------------------
+排名: 9
+书名: The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics
+评分: 4.0
+价格: 22.60
+------------------------------------------
+排名: 10
+书名: The Black Maria
+评分: 1.0
+价格: 52.15
+------------------------------------------
+排名: 11
+书名: Starving Hearts (Triangular Trade Trilogy, #1)
+评分: 2.0
+价格: 13.99
+------------------------------------------
+排名: 12
+书名: Shakespeare's Sonnets
+评分: 4.0
+价格: 20.66
+------------------------------------------
+排名: 13
+书名: Set Me Free
+评分: 5.0
+价格: 17.46
+------------------------------------------
+排名: 14
+书名: Scott Pilgrim's Precious Little Life (Scott Pilgrim #1)
+评分: 5.0
+价格: 52.29
+------------------------------------------
+排名: 15
+书名: Rip it Up and Start Again
+评分: 5.0
+价格: 35.02
+------------------------------------------
+排名: 16
+书名: Our Band Could Be Your Life: Scenes from the American Indie Underground, 1981-1991
+评分: 3.0
+价格: 57.25
+------------------------------------------
+排名: 17
+书名: Olio
+评分: 1.0
+价格: 23.88
+------------------------------------------
+排名: 18
+书名: Mesaerion: The Best Science Fiction Stories 1800-1849
+评分: 1.0
+价格: 37.59
+------------------------------------------
+排名: 19
+书名: Libertarianism for Beginners
+评分: 2.0
+价格: 51.33
+------------------------------------------
+排名: 20
+书名: It's Only the Himalayas
+评分: 2.0
+价格: 45.17
+------------------------------------------
+排名: 1
+书名: In Her Wake
+评分: 1.0
+价格: 12.84
+------------------------------------------
+排名: 2
+书名: How Music Works
+评分: 2.0
+价格: 37.32
+------------------------------------------
+排名: 3
+书名: Foolproof Preserving: A Guide to Small Batch Jams, Jellies, Pickles, Condiments, and More: A Foolproof Guide to Making Small Batch Jams, Jellies, Pickles, Condiments, and More
+评分: 3.0
+价格: 30.52
+------------------------------------------
+排名: 4
+书名: Chase Me (Paris Nights #2)
+评分: 5.0
+价格: 25.27
+------------------------------------------
+排名: 5
+书名: Black Dust
+评分: 5.0
+价格: 34.53
+------------------------------------------
+排名: 6
+书名: Birdsong: A Story in Pictures
+评分: 3.0
+价格: 54.64
+------------------------------------------
+排名: 7
+书名: America's Cradle of Quarterbacks: Western Pennsylvania's Football Factory from Johnny Unitas to Joe Montana
+评分: 3.0
+价格: 22.50
+------------------------------------------
+排名: 8
+书名: Aladdin and His Wonderful Lamp
+评分: 3.0
+价格: 53.13
+------------------------------------------
+排名: 9
+书名: Worlds Elsewhere: Journeys Around Shakespeare’s Globe
+评分: 5.0
+价格: 40.30
+------------------------------------------
+排名: 10
+书名: Wall and Piece
+评分: 4.0
+价格: 44.18
+------------------------------------------
+排名: 11
+书名: The Four Agreements: A Practical Guide to Personal Freedom
+评分: 5.0
+价格: 17.66
+------------------------------------------
+排名: 12
+书名: The Five Love Languages: How to Express Heartfelt Commitment to Your Mate
+评分: 3.0
+价格: 31.05
+------------------------------------------
+排名: 13
+书名: The Elephant Tree
+评分: 5.0
+价格: 23.82
+------------------------------------------
+排名: 14
+书名: The Bear and the Piano
+评分: 1.0
+价格: 36.89
+------------------------------------------
+排名: 15
+书名: Sophie's World
+评分: 5.0
+价格: 15.94
+------------------------------------------
+排名: 16
+书名: Penny Maybe
+评分: 3.0
+价格: 33.29
+------------------------------------------
+排名: 17
+书名: Maude (1883-1993):She Grew Up with the country
+评分: 2.0
+价格: 18.02
+------------------------------------------
+排名: 18
+书名: In a Dark, Dark Wood
+评分: 1.0
+价格: 19.63
+------------------------------------------
+排名: 19
+书名: Behind Closed Doors
+评分: 4.0
+价格: 52.22
+------------------------------------------
+排名: 20
+书名: You can't bury them all: Poems
+评分: 2.0
+价格: 33.63
+------------------------------------------
+排名: 1
+书名: Slow States of Collapse: Poems
+评分: 3.0
+价格: 57.31
+------------------------------------------
+排名: 2
+书名: Reasons to Stay Alive
+评分: 2.0
+价格: 26.41
+------------------------------------------
+排名: 3
+书名: Private Paris (Private #10)
+评分: 5.0
+价格: 47.61
+------------------------------------------
+排名: 4
+书名: #HigherSelfie: Wake Up Your Life. Free Your Soul. Find Your Tribe.
+评分: 5.0
+价格: 23.11
+------------------------------------------
+排名: 5
+书名: Without Borders (Wanderlove #1)
+评分: 2.0
+价格: 45.07
+------------------------------------------
+排名: 6
+书名: When We Collided
+评分: 1.0
+价格: 31.77
+------------------------------------------
+排名: 7
+书名: We Love You, Charlie Freeman
+评分: 5.0
+价格: 50.27
+------------------------------------------
+排名: 8
+书名: Untitled Collection: Sabbath Poems 2014
+评分: 4.0
+价格: 14.27
+------------------------------------------
+排名: 9
+书名: Unseen City: The Majesty of Pigeons, the Discreet Charm of Snails & Other Wonders of the Urban Wilderness
+评分: 4.0
+价格: 44.18
+------------------------------------------
+排名: 10
+书名: Unicorn Tracks
+评分: 3.0
+价格: 18.78
+------------------------------------------
+排名: 11
+书名: Unbound: How Eight Technologies Made Us Human, Transformed Society, and Brought Our World to the Brink
+评分: 1.0
+价格: 25.52
+------------------------------------------
+排名: 12
+书名: Tsubasa: WoRLD CHRoNiCLE 2 (Tsubasa WoRLD CHRoNiCLE #2)
+评分: 1.0
+价格: 16.28
+------------------------------------------
+排名: 13
+书名: Throwing Rocks at the Google Bus: How Growth Became the Enemy of Prosperity
+评分: 3.0
+价格: 31.12
+------------------------------------------
+排名: 14
+书名: This One Summer
+评分: 4.0
+价格: 19.49
+------------------------------------------
+排名: 15
+书名: Thirst
+评分: 5.0
+价格: 17.27
+------------------------------------------
+排名: 16
+书名: The Torch Is Passed: A Harding Family Story
+评分: 1.0
+价格: 19.09
+------------------------------------------
+排名: 17
+书名: The Secret of Dreadwillow Carse
+评分: 1.0
+价格: 56.13
+------------------------------------------
+排名: 18
+书名: The Pioneer Woman Cooks: Dinnertime: Comfort Classics, Freezer Food, 16-Minute Meals, and Other Delicious Ways to Solve Supper!
+评分: 1.0
+价格: 56.41
+------------------------------------------
+排名: 19
+书名: The Past Never Ends
+评分: 4.0
+价格: 56.50
+------------------------------------------
+排名: 20
+书名: The Natural History of Us (The Fine Art of Pretending #2)
+评分: 3.0
+价格: 45.22
+------------------------------------------
+排名: 1
+书名: The Nameless City (The Nameless City #1)
+评分: 4.0
+价格: 38.16
+------------------------------------------
+排名: 2
+书名: The Murder That Never Was (Forensic Instincts #5)
+评分: 3.0
+价格: 54.11
+------------------------------------------
+排名: 3
+书名: The Most Perfect Thing: Inside (and Outside) a Bird's Egg
+评分: 4.0
+价格: 42.96
+------------------------------------------
+排名: 4
+书名: The Mindfulness and Acceptance Workbook for Anxiety: A Guide to Breaking Free from Anxiety, Phobias, and Worry Using Acceptance and Commitment Therapy
+评分: 4.0
+价格: 23.89
+------------------------------------------
+排名: 5
+书名: The Life-Changing Magic of Tidying Up: The Japanese Art of Decluttering and Organizing
+评分: 3.0
+价格: 16.77
+------------------------------------------
+排名: 6
+书名: The Inefficiency Assassin: Time Management Tactics for Working Smarter, Not Longer
+评分: 5.0
+价格: 20.59
+------------------------------------------
+排名: 7
+书名: The Gutsy Girl: Escapades for Your Life of Epic Adventure
+评分: 1.0
+价格: 37.13
+------------------------------------------
+排名: 8
+书名: The Electric Pencil: Drawings from Inside State Hospital No. 3
+评分: 1.0
+价格: 56.06
+------------------------------------------
+排名: 9
+书名: The Death of Humanity: and the Case for Life
+评分: 4.0
+价格: 58.11
+------------------------------------------
+排名: 10
+书名: The Bulletproof Diet: Lose up to a Pound a Day, Reclaim Energy and Focus, Upgrade Your Life
+评分: 3.0
+价格: 49.05
+------------------------------------------
+排名: 11
+书名: The Art Forger
+评分: 3.0
+价格: 40.76
+------------------------------------------
+排名: 12
+书名: The Age of Genius: The Seventeenth Century and the Birth of the Modern Mind
+评分: 1.0
+价格: 19.73
+------------------------------------------
+排名: 13
+书名: The Activist's Tao Te Ching: Ancient Advice for a Modern Revolution
+评分: 5.0
+价格: 32.24
+------------------------------------------
+排名: 14
+书名: Spark Joy: An Illustrated Master Class on the Art of Organizing and Tidying Up
+评分: 4.0
+价格: 41.83
+------------------------------------------
+排名: 15
+书名: Soul Reader
+评分: 2.0
+价格: 39.58
+------------------------------------------
+排名: 16
+书名: Security
+评分: 2.0
+价格: 39.25
+------------------------------------------
+排名: 17
+书名: Saga, Volume 6 (Saga (Collected Editions) #6)
+评分: 3.0
+价格: 25.02
+------------------------------------------
+排名: 18
+书名: Saga, Volume 5 (Saga (Collected Editions) #5)
+评分: 2.0
+价格: 51.04
+------------------------------------------
+排名: 19
+书名: Reskilling America: Learning to Labor in the Twenty-First Century
+评分: 2.0
+价格: 19.83
+------------------------------------------
+排名: 20
+书名: Rat Queens, Vol. 3: Demons (Rat Queens (Collected Editions) #11-15)
+评分: 3.0
+价格: 50.40
+------------------------------------------
+排名: 1
+书名: Princess Jellyfish 2-in-1 Omnibus, Vol. 01 (Princess Jellyfish 2-in-1 Omnibus #1)
+评分: 5.0
+价格: 13.61
+------------------------------------------
+排名: 2
+书名: Princess Between Worlds (Wide-Awake Princess #5)
+评分: 5.0
+价格: 13.34
+------------------------------------------
+排名: 3
+书名: Pop Gun War, Volume 1: Gift
+评分: 1.0
+价格: 18.97
+------------------------------------------
+排名: 4
+书名: Political Suicide: Missteps, Peccadilloes, Bad Calls, Backroom Hijinx, Sordid Pasts, Rotten Breaks, and Just Plain Dumb Mistakes in the Annals of American Politics
+评分: 2.0
+价格: 36.28
+------------------------------------------
+排名: 5
+书名: Patience
+评分: 3.0
+价格: 10.16
+------------------------------------------
+排名: 6
+书名: Outcast, Vol. 1: A Darkness Surrounds Him (Outcast #1)
+评分: 4.0
+价格: 15.44
+------------------------------------------
+排名: 7
+书名: orange: The Complete Collection 1 (orange: The Complete Collection #1)
+评分: 1.0
+价格: 48.41
+------------------------------------------
+排名: 8
+书名: Online Marketing for Busy Authors: A Step-By-Step Guide
+评分: 1.0
+价格: 46.35
+------------------------------------------
+排名: 9
+书名: On a Midnight Clear
+评分: 3.0
+价格: 14.07
+------------------------------------------
+排名: 10
+书名: Obsidian (Lux #1)
+评分: 2.0
+价格: 14.86
+------------------------------------------
+排名: 11
+书名: My Paris Kitchen: Recipes and Stories
+评分: 2.0
+价格: 33.37
+------------------------------------------
+排名: 12
+书名: Masks and Shadows
+评分: 2.0
+价格: 56.40
+------------------------------------------
+排名: 13
+书名: Mama Tried: Traditional Italian Cooking for the Screwed, Crude, Vegan, and Tattooed
+评分: 4.0
+价格: 14.02
+------------------------------------------
+排名: 14
+书名: Lumberjanes, Vol. 2: Friendship to the Max (Lumberjanes #5-8)
+评分: 2.0
+价格: 46.91
+------------------------------------------
+排名: 15
+书名: Lumberjanes, Vol. 1: Beware the Kitten Holy (Lumberjanes #1-4)
+评分: 3.0
+价格: 45.61
+------------------------------------------
+排名: 16
+书名: Lumberjanes Vol. 3: A Terrible Plan (Lumberjanes #9-12)
+评分: 2.0
+价格: 19.92
+------------------------------------------
+排名: 17
+书名: Layered: Baking, Building, and Styling Spectacular Cakes
+评分: 1.0
+价格: 40.11
+------------------------------------------
+排名: 18
+书名: Judo: Seven Steps to Black Belt (an Introductory Guide for Beginners)
+评分: 2.0
+价格: 53.90
+------------------------------------------
+排名: 19
+书名: Join
+评分: 5.0
+价格: 35.67
+------------------------------------------
+排名: 20
+书名: In the Country We Love: My Family Divided
+评分: 4.0
+价格: 22.00
+------------------------------------------
+排名: 1
+书名: Immunity: How Elie Metchnikoff Changed the Course of Modern Medicine
+评分: 5.0
+价格: 57.36
+------------------------------------------
+排名: 2
+书名: I Hate Fairyland, Vol. 1: Madly Ever After (I Hate Fairyland (Compilations) #1-5)
+评分: 2.0
+价格: 29.17
+------------------------------------------
+排名: 3
+书名: I am a Hero Omnibus Volume 1
+评分: 3.0
+价格: 54.63
+------------------------------------------
+排名: 4
+书名: How to Be Miserable: 40 Strategies You Already Use
+评分: 1.0
+价格: 46.03
+------------------------------------------
+排名: 5
+书名: Her Backup Boyfriend (The Sorensen Family #1)
+评分: 1.0
+价格: 33.97
+------------------------------------------
+排名: 6
+书名: Giant Days, Vol. 2 (Giant Days #5-8)
+评分: 2.0
+价格: 22.11
+------------------------------------------
+排名: 7
+书名: Forever and Forever: The Courtship of Henry Longfellow and Fanny Appleton
+评分: 3.0
+价格: 29.69
+------------------------------------------
+排名: 8
+书名: First and First (Five Boroughs #3)
+评分: 4.0
+价格: 15.97
+------------------------------------------
+排名: 9
+书名: Fifty Shades Darker (Fifty Shades #2)
+评分: 1.0
+价格: 21.96
+------------------------------------------
+排名: 10
+书名: Everydata: The Misinformation Hidden in the Little Data You Consume Every Day
+评分: 2.0
+价格: 54.35
+------------------------------------------
+排名: 11
+书名: Don't Be a Jerk: And Other Practical Advice from Dogen, Japan's Greatest Zen Master
+评分: 2.0
+价格: 37.97
+------------------------------------------
+排名: 12
+书名: Danganronpa Volume 1
+评分: 4.0
+价格: 51.99
+------------------------------------------
+排名: 13
+书名: Crown of Midnight (Throne of Glass #2)
+评分: 3.0
+价格: 43.29
+------------------------------------------
+排名: 14
+书名: Codename Baboushka, Volume 1: The Conclave of Death
+评分: 4.0
+价格: 36.72
+------------------------------------------
+排名: 15
+书名: Camp Midnight
+评分: 4.0
+价格: 17.08
+------------------------------------------
+排名: 16
+书名: Call the Nurse: True Stories of a Country Nurse on a Scottish Isle
+评分: 5.0
+价格: 29.14
+------------------------------------------
+排名: 17
+书名: Burning
+评分: 3.0
+价格: 28.81
+------------------------------------------
+排名: 18
+书名: Bossypants
+评分: 2.0
+价格: 49.46
+------------------------------------------
+排名: 19
+书名: Bitch Planet, Vol. 1: Extraordinary Machine (Bitch Planet (Collected Editions))
+评分: 2.0
+价格: 37.92
+------------------------------------------
+排名: 20
+书名: Avatar: The Last Airbender: Smoke and Shadow, Part 3 (Smoke and Shadow #3)
+评分: 2.0
+价格: 28.09
+------------------------------------------
+排名: 1
+书名: Algorithms to Live By: The Computer Science of Human Decisions
+评分: 1.0
+价格: 30.81
+------------------------------------------
+排名: 2
+书名: A World of Flavor: Your Gluten Free Passport
+评分: 1.0
+价格: 42.95
+------------------------------------------
+排名: 3
+书名: A Piece of Sky, a Grain of Rice: A Memoir in Four Meditations
+评分: 5.0
+价格: 56.76
+------------------------------------------
+排名: 4
+书名: A Murder in Time
+评分: 1.0
+价格: 16.64
+------------------------------------------
+排名: 5
+书名: A Flight of Arrows (The Pathfinders #2)
+评分: 5.0
+价格: 55.53
+------------------------------------------
+排名: 6
+书名: A Fierce and Subtle Poison
+评分: 4.0
+价格: 28.13
+------------------------------------------
+排名: 7
+书名: A Court of Thorns and Roses (A Court of Thorns and Roses #1)
+评分: 1.0
+价格: 52.37
+------------------------------------------
+排名: 8
+书名: (Un)Qualified: How God Uses Broken People to Do Big Things
+评分: 5.0
+价格: 54.00
+------------------------------------------
+排名: 9
+书名: You Are What You Love: The Spiritual Power of Habit
+评分: 4.0
+价格: 21.87
+------------------------------------------
+排名: 10
+书名: William Shakespeare's Star Wars: Verily, A New Hope (William Shakespeare's Star Wars #4)
+评分: 4.0
+价格: 43.30
+------------------------------------------
+排名: 11
+书名: Tuesday Nights in 1980
+评分: 2.0
+价格: 21.04
+------------------------------------------
+排名: 12
+书名: Tracing Numbers on a Train
+评分: 3.0
+价格: 41.60
+------------------------------------------
+排名: 13
+书名: Throne of Glass (Throne of Glass #1)
+评分: 3.0
+价格: 35.07
+------------------------------------------
+排名: 14
+书名: Thomas Jefferson and the Tripoli Pirates: The Forgotten War That Changed American History
+评分: 1.0
+价格: 59.64
+------------------------------------------
+排名: 15
+书名: Thirteen Reasons Why
+评分: 1.0
+价格: 52.72
+------------------------------------------
+排名: 16
+书名: The White Cat and the Monk: A Retelling of the Poem “Pangur Bán”
+评分: 4.0
+价格: 58.08
+------------------------------------------
+排名: 17
+书名: The Wedding Dress
+评分: 1.0
+价格: 24.12
+------------------------------------------
+排名: 18
+书名: The Vacationers
+评分: 4.0
+价格: 42.15
+------------------------------------------
+排名: 19
+书名: The Third Wave: An Entrepreneur’s Vision of the Future
+评分: 5.0
+价格: 12.61
+------------------------------------------
+排名: 20
+书名: The Stranger
+评分: 4.0
+价格: 17.44
+------------------------------------------
+排名: 1
+书名: The Shadow Hero (The Shadow Hero)
+评分: 1.0
+价格: 33.14
+------------------------------------------
+排名: 2
+书名: The Secret (The Secret #1)
+评分: 4.0
+价格: 27.37
+------------------------------------------
+排名: 3
+书名: The Regional Office Is Under Attack!
+评分: 5.0
+价格: 51.36
+------------------------------------------
+排名: 4
+书名: The Psychopath Test: A Journey Through the Madness Industry
+评分: 2.0
+价格: 36.00
+------------------------------------------
+排名: 5
+书名: The Project
+评分: 1.0
+价格: 10.65
+------------------------------------------
+排名: 6
+书名: The Power of Now: A Guide to Spiritual Enlightenment
+评分: 2.0
+价格: 43.54
+------------------------------------------
+排名: 7
+书名: The Omnivore's Dilemma: A Natural History of Four Meals
+评分: 2.0
+价格: 38.21
+------------------------------------------
+排名: 8
+书名: The Nerdy Nummies Cookbook: Sweet Treats for the Geek in All of Us
+评分: 5.0
+价格: 37.34
+------------------------------------------
+排名: 9
+书名: The Murder of Roger Ackroyd (Hercule Poirot #4)
+评分: 4.0
+价格: 44.10
+------------------------------------------
+排名: 10
+书名: The Mistake (Off-Campus #2)
+评分: 3.0
+价格: 43.29
+------------------------------------------
+排名: 11
+书名: The Matchmaker's Playbook (Wingmen Inc. #1)
+评分: 1.0
+价格: 55.85
+------------------------------------------
+排名: 12
+书名: The Love and Lemons Cookbook: An Apple-to-Zucchini Celebration of Impromptu Cooking
+评分: 2.0
+价格: 37.60
+------------------------------------------
+排名: 13
+书名: The Long Shadow of Small Ghosts: Murder and Memory in an American City
+评分: 1.0
+价格: 10.97
+------------------------------------------
+排名: 14
+书名: The Kite Runner
+评分: 4.0
+价格: 41.82
+------------------------------------------
+排名: 15
+书名: The House by the Lake
+评分: 1.0
+价格: 36.95
+------------------------------------------
+排名: 16
+书名: The Glittering Court (The Glittering Court #1)
+评分: 1.0
+价格: 44.28
+------------------------------------------
+排名: 17
+书名: The Girl on the Train
+评分: 2.0
+价格: 55.02
+------------------------------------------
+排名: 18
+书名: The Genius of Birds
+评分: 1.0
+价格: 17.24
+------------------------------------------
+排名: 19
+书名: The Emerald Mystery
+评分: 2.0
+价格: 23.15
+------------------------------------------
+排名: 20
+书名: The Cookies & Cups Cookbook: 125+ sweet & savory recipes reminding you to Always Eat Dessert First
+评分: 1.0
+价格: 41.25
+------------------------------------------
+排名: 1
+书名: The Bridge to Consciousness: I'm Writing the Bridge Between Science and Our Old and New Beliefs.
+评分: 3.0
+价格: 32.00
+------------------------------------------
+排名: 2
+书名: The Artist's Way: A Spiritual Path to Higher Creativity
+评分: 5.0
+价格: 38.49
+------------------------------------------
+排名: 3
+书名: The Art of War
+评分: 5.0
+价格: 33.34
+------------------------------------------
+排名: 4
+书名: The Argonauts
+评分: 2.0
+价格: 10.93
+------------------------------------------
+排名: 5
+书名: The 10% Entrepreneur: Live Your Startup Dream Without Quitting Your Day Job
+评分: 3.0
+价格: 27.55
+------------------------------------------
+排名: 6
+书名: Suddenly in Love (Lake Haven #1)
+评分: 2.0
+价格: 55.99
+------------------------------------------
+排名: 7
+书名: Something More Than This
+评分: 4.0
+价格: 16.24
+------------------------------------------
+排名: 8
+书名: Soft Apocalypse
+评分: 2.0
+价格: 26.12
+------------------------------------------
+排名: 9
+书名: So You've Been Publicly Shamed
+评分: 2.0
+价格: 12.23
+------------------------------------------
+排名: 10
+书名: Shoe Dog: A Memoir by the Creator of NIKE
+评分: 2.0
+价格: 23.99
+------------------------------------------
+排名: 11
+书名: Shobu Samurai, Project Aryoku (#3)
+评分: 3.0
+价格: 29.06
+------------------------------------------
+排名: 12
+书名: Secrets and Lace (Fatal Hearts #1)
+评分: 1.0
+价格: 20.27
+------------------------------------------
+排名: 13
+书名: Scarlett Epstein Hates It Here
+评分: 5.0
+价格: 43.55
+------------------------------------------
+排名: 14
+书名: Romero and Juliet: A Tragic Tale of Love and Zombies
+评分: 1.0
+价格: 36.94
+------------------------------------------
+排名: 15
+书名: Redeeming Love
+评分: 5.0
+价格: 20.47
+------------------------------------------
+排名: 16
+书名: Poses for Artists Volume 1 - Dynamic and Sitting Poses: An Essential Reference for Figure Drawing and the Human Form
+评分: 1.0
+价格: 41.06
+------------------------------------------
+排名: 17
+书名: Poems That Make Grown Women Cry
+评分: 4.0
+价格: 14.19
+------------------------------------------
+排名: 18
+书名: Nightingale, Sing
+评分: 1.0
+价格: 38.28
+------------------------------------------
+排名: 19
+书名: Night Sky with Exit Wounds
+评分: 1.0
+价格: 41.05
+------------------------------------------
+排名: 20
+书名: Mrs. Houdini
+评分: 5.0
+价格: 30.25
+------------------------------------------
+排名: 1
+书名: Modern Romance
+评分: 5.0
+价格: 28.26
+------------------------------------------
+排名: 2
+书名: Miss Peregrine’s Home for Peculiar Children (Miss Peregrine’s Peculiar Children #1)
+评分: 1.0
+价格: 10.76
+------------------------------------------
+排名: 3
+书名: Louisa: The Extraordinary Life of Mrs. Adams
+评分: 2.0
+价格: 16.85
+------------------------------------------
+排名: 4
+书名: Little Red
+评分: 3.0
+价格: 13.47
+------------------------------------------
+排名: 5
+书名: Library of Souls (Miss Peregrine’s Peculiar Children #3)
+评分: 5.0
+价格: 48.56
+------------------------------------------
+排名: 6
+书名: Large Print Heart of the Pride
+评分: 2.0
+价格: 19.15
+------------------------------------------
+排名: 7
+书名: I Had a Nice Time And Other Lies...: How to find love & sh*t like that
+评分: 4.0
+价格: 57.36
+------------------------------------------
+排名: 8
+书名: Hollow City (Miss Peregrine’s Peculiar Children #2)
+评分: 1.0
+价格: 42.98
+------------------------------------------
+排名: 9
+书名: Grumbles
+评分: 2.0
+价格: 22.16
+------------------------------------------
+排名: 10
+书名: Full Moon over Noah’s Ark: An Odyssey to Mount Ararat and Beyond
+评分: 4.0
+价格: 49.43
+------------------------------------------
+排名: 11
+书名: Frostbite (Vampire Academy #2)
+评分: 5.0
+价格: 29.99
+------------------------------------------
+排名: 12
+书名: Follow You Home
+评分: 1.0
+价格: 21.36
+------------------------------------------
+排名: 13
+书名: First Steps for New Christians (Print Edition)
+评分: 1.0
+价格: 29.00
+------------------------------------------
+排名: 14
+书名: Finders Keepers (Bill Hodges Trilogy #2)
+评分: 5.0
+价格: 53.53
+------------------------------------------
+排名: 15
+书名: Fables, Vol. 1: Legends in Exile (Fables #1)
+评分: 4.0
+价格: 41.62
+------------------------------------------
+排名: 16
+书名: Eureka Trivia 6.0
+评分: 4.0
+价格: 54.59
+------------------------------------------
+排名: 17
+书名: Drive: The Surprising Truth About What Motivates Us
+评分: 4.0
+价格: 34.95
+------------------------------------------
+排名: 18
+书名: Done Rubbed Out (Reightman & Bailey #1)
+评分: 5.0
+价格: 37.72
+------------------------------------------
+排名: 19
+书名: Doing It Over (Most Likely To #1)
+评分: 3.0
+价格: 35.61
+------------------------------------------
+排名: 20
+书名: Deliciously Ella Every Day: Quick and Easy Recipes for Gluten-Free Snacks, Packed Lunches, and Simple Meals
+评分: 3.0
+价格: 42.16
+------------------------------------------
+排名: 1
+书名: Dark Notes
+评分: 5.0
+价格: 19.19
+------------------------------------------
+排名: 2
+书名: Daring Greatly: How the Courage to Be Vulnerable Transforms the Way We Live, Love, Parent, and Lead
+评分: 3.0
+价格: 19.43
+------------------------------------------
+排名: 3
+书名: Close to You
+评分: 4.0
+价格: 49.46
+------------------------------------------
+排名: 4
+书名: Chasing Heaven: What Dying Taught Me About Living
+评分: 2.0
+价格: 37.80
+------------------------------------------
+排名: 5
+书名: Big Magic: Creative Living Beyond Fear
+评分: 3.0
+价格: 30.80
+------------------------------------------
+排名: 6
+书名: Becoming Wise: An Inquiry into the Mystery and Art of Living
+评分: 2.0
+价格: 27.43
+------------------------------------------
+排名: 7
+书名: Beauty Restored (Riley Family Legacy Novellas #3)
+评分: 2.0
+价格: 11.11
+------------------------------------------
+排名: 8
+书名: Batman: The Long Halloween (Batman)
+评分: 2.0
+价格: 36.50
+------------------------------------------
+排名: 9
+书名: Batman: The Dark Knight Returns (Batman)
+评分: 5.0
+价格: 15.38
+------------------------------------------
+排名: 10
+书名: Ayumi's Violin
+评分: 2.0
+价格: 15.48
+------------------------------------------
+排名: 11
+书名: Anonymous
+评分: 4.0
+价格: 46.82
+------------------------------------------
+排名: 12
+书名: Amy Meets the Saints and Sages
+评分: 3.0
+价格: 18.46
+------------------------------------------
+排名: 13
+书名: Amid the Chaos
+评分: 1.0
+价格: 36.58
+------------------------------------------
+排名: 14
+书名: Amatus
+评分: 5.0
+价格: 50.54
+------------------------------------------
+排名: 15
+书名: Agnostic: A Spirited Manifesto
+评分: 5.0
+价格: 12.51
+------------------------------------------
+排名: 16
+书名: Zealot: The Life and Times of Jesus of Nazareth
+评分: 3.0
+价格: 24.70
+------------------------------------------
+排名: 17
+书名: You (You #1)
+评分: 5.0
+价格: 43.61
+------------------------------------------
+排名: 18
+书名: Wonder Woman: Earth One, Volume One (Wonder Woman: Earth One #1)
+评分: 4.0
+价格: 37.34
+------------------------------------------
+排名: 19
+书名: Wild Swans
+评分: 2.0
+价格: 14.36
+------------------------------------------
+排名: 20
+书名: Why the Right Went Wrong: Conservatism--From Goldwater to the Tea Party and Beyond
+评分: 4.0
+价格: 52.65
+------------------------------------------
+排名: 1
+书名: Whole Lotta Creativity Going On: 60 Fun and Unusual Exercises to Awaken and Strengthen Your Creativity
+评分: 4.0
+价格: 38.20
+------------------------------------------
+排名: 2
+书名: What's It Like in Space?: Stories from Astronauts Who've Been There
+评分: 2.0
+价格: 19.60
+------------------------------------------
+排名: 3
+书名: We Are Robin, Vol. 1: The Vigilante Business (We Are Robin #1)
+评分: 1.0
+价格: 53.90
+------------------------------------------
+排名: 4
+书名: Walt Disney's Alice in Wonderland
+评分: 5.0
+价格: 12.96
+------------------------------------------
+排名: 5
+书名: V for Vendetta (V for Vendetta Complete)
+评分: 4.0
+价格: 37.10
+------------------------------------------
+排名: 6
+书名: Until Friday Night (The Field Party #1)
+评分: 2.0
+价格: 46.31
+------------------------------------------
+排名: 7
+书名: Unbroken: A World War II Story of Survival, Resilience, and Redemption
+评分: 2.0
+价格: 45.95
+------------------------------------------
+排名: 8
+书名: Twenty Yawns
+评分: 2.0
+价格: 22.08
+------------------------------------------
+排名: 9
+书名: Through the Woods
+评分: 2.0
+价格: 25.38
+------------------------------------------
+排名: 10
+书名: This Is Where It Ends
+评分: 2.0
+价格: 27.12
+------------------------------------------
+排名: 11
+书名: The Year of Magical Thinking
+评分: 2.0
+价格: 43.04
+------------------------------------------
+排名: 12
+书名: The Wright Brothers
+评分: 4.0
+价格: 56.80
+------------------------------------------
+排名: 13
+书名: The White Queen (The Cousins' War #1)
+评分: 5.0
+价格: 25.91
+------------------------------------------
+排名: 14
+书名: The Wedding Pact (The O'Malleys #2)
+评分: 3.0
+价格: 32.61
+------------------------------------------
+排名: 15
+书名: The Time Keeper
+评分: 5.0
+价格: 27.88
+------------------------------------------
+排名: 16
+书名: The Testament of Mary
+评分: 4.0
+价格: 52.67
+------------------------------------------
+排名: 17
+书名: The Star-Touched Queen
+评分: 5.0
+价格: 46.02
+------------------------------------------
+排名: 18
+书名: The Songs of the Gods
+评分: 5.0
+价格: 44.48
+------------------------------------------
+排名: 19
+书名: The Song of Achilles
+评分: 5.0
+价格: 37.40
+------------------------------------------
+排名: 20
+书名: The Rosie Project (Don Tillman #1)
+评分: 1.0
+价格: 54.04
+------------------------------------------
+排名: 1
+书名: The Power of Habit: Why We Do What We Do in Life and Business
+评分: 3.0
+价格: 16.88
+------------------------------------------
+排名: 2
+书名: The Marriage of Opposites
+评分: 4.0
+价格: 28.08
+------------------------------------------
+排名: 3
+书名: The Lucifer Effect: Understanding How Good People Turn Evil
+评分: 1.0
+价格: 10.40
+------------------------------------------
+排名: 4
+书名: The Long Haul (Diary of a Wimpy Kid #9)
+评分: 1.0
+价格: 44.07
+------------------------------------------
+排名: 5
+书名: The Loney
+评分: 1.0
+价格: 23.40
+------------------------------------------
+排名: 6
+书名: The Literature Book (Big Ideas Simply Explained)
+评分: 3.0
+价格: 17.43
+------------------------------------------
+排名: 7
+书名: The Last Mile (Amos Decker #2)
+评分: 2.0
+价格: 54.21
+------------------------------------------
+排名: 8
+书名: The Immortal Life of Henrietta Lacks
+评分: 2.0
+价格: 40.67
+------------------------------------------
+排名: 9
+书名: The Hidden Oracle (The Trials of Apollo #1)
+评分: 2.0
+价格: 52.26
+------------------------------------------
+排名: 10
+书名: The Help Yourself Cookbook for Kids: 60 Easy Plant-Based Recipes Kids Can Make to Stay Healthy and Save the Earth
+评分: 3.0
+价格: 28.77
+------------------------------------------
+排名: 11
+书名: The Guilty (Will Robie #4)
+评分: 2.0
+价格: 13.82
+------------------------------------------
+排名: 12
+书名: The First Hostage (J.B. Collins #2)
+评分: 3.0
+价格: 25.85
+------------------------------------------
+排名: 13
+书名: The Dovekeepers
+评分: 1.0
+价格: 48.78
+------------------------------------------
+排名: 14
+书名: The Darkest Lie
+评分: 5.0
+价格: 35.35
+------------------------------------------
+排名: 15
+书名: The Bane Chronicles (The Bane Chronicles #1-11)
+评分: 4.0
+价格: 44.73
+------------------------------------------
+排名: 16
+书名: The Bad-Ass Librarians of Timbuktu: And Their Race to Save the World’s Most Precious Manuscripts
+评分: 1.0
+价格: 15.77
+------------------------------------------
+排名: 17
+书名: The 14th Colony (Cotton Malone #11)
+评分: 1.0
+价格: 39.24
+------------------------------------------
+排名: 18
+书名: That Darkness (Gardiner and Renner #1)
+评分: 1.0
+价格: 13.92
+------------------------------------------
+排名: 19
+书名: Tastes Like Fear (DI Marnie Rome #3)
+评分: 1.0
+价格: 10.69
+------------------------------------------
+排名: 20
+书名: Take Me with You
+评分: 3.0
+价格: 45.21
+------------------------------------------
+排名: 1
+书名: Swell: A Year of Waves
+评分: 1.0
+价格: 45.58
+------------------------------------------
+排名: 2
+书名: Superman Vol. 1: Before Truth (Superman by Gene Luen Yang #1)
+评分: 5.0
+价格: 11.89
+------------------------------------------
+排名: 3
+书名: Still Life with Bread Crumbs
+评分: 3.0
+价格: 26.41
+------------------------------------------
+排名: 4
+书名: Steve Jobs
+评分: 5.0
+价格: 39.50
+------------------------------------------
+排名: 5
+书名: Sorting the Beef from the Bull: The Science of Food Fraud Forensics
+评分: 4.0
+价格: 44.74
+------------------------------------------
+排名: 6
+书名: Someone Like You (The Harrisons #2)
+评分: 5.0
+价格: 52.79
+------------------------------------------
+排名: 7
+书名: So Cute It Hurts!!, Vol. 6 (So Cute It Hurts!! #6)
+评分: 4.0
+价格: 35.43
+------------------------------------------
+排名: 8
+书名: Shtum
+评分: 4.0
+价格: 55.84
+------------------------------------------
+排名: 9
+书名: See America: A Celebration of Our National Parks & Treasured Sites
+评分: 3.0
+价格: 48.87
+------------------------------------------
+排名: 10
+书名: salt.
+评分: 4.0
+价格: 46.78
+------------------------------------------
+排名: 11
+书名: Robin War
+评分: 3.0
+价格: 47.82
+------------------------------------------
+排名: 12
+书名: Red Hood/Arsenal, Vol. 1: Open for Business (Red Hood/Arsenal #1)
+评分: 2.0
+价格: 25.48
+------------------------------------------
+排名: 13
+书名: Rain Fish
+评分: 3.0
+价格: 23.57
+------------------------------------------
+排名: 14
+书名: Quarter Life Poetry: Poems for the Young, Broke and Hangry
+评分: 5.0
+价格: 50.89
+------------------------------------------
+排名: 15
+书名: Pet Sematary
+评分: 3.0
+价格: 10.56
+------------------------------------------
+排名: 16
+书名: Overload: How to Unplug, Unwind, and Unleash Yourself from the Pressure of Stress
+评分: 3.0
+价格: 52.15
+------------------------------------------
+排名: 17
+书名: Once Was a Time
+评分: 2.0
+价格: 18.28
+------------------------------------------
+排名: 18
+书名: Old School (Diary of a Wimpy Kid #10)
+评分: 5.0
+价格: 11.83
+------------------------------------------
+排名: 19
+书名: No Dream Is Too High: Life Lessons From a Man Who Walked on the Moon
+评分: 2.0
+价格: 21.95
+------------------------------------------
+排名: 20
+书名: Naruto (3-in-1 Edition), Vol. 14: Includes Vols. 40, 41 & 42 (Naruto: Omnibus #14)
+评分: 2.0
+价格: 38.39
+------------------------------------------
+排名: 1
+书名: My Name Is Lucy Barton
+评分: 1.0
+价格: 41.56
+------------------------------------------
+排名: 2
+书名: My Mrs. Brown
+评分: 3.0
+价格: 24.48
+------------------------------------------
+排名: 3
+书名: My Kind of Crazy
+评分: 1.0
+价格: 40.36
+------------------------------------------
+排名: 4
+书名: Mr. Mercedes (Bill Hodges Trilogy #1)
+评分: 1.0
+价格: 28.90
+------------------------------------------
+排名: 5
+书名: More Than Music (Chasing the Dream #1)
+评分: 2.0
+价格: 37.61
+------------------------------------------
+排名: 6
+书名: Made to Stick: Why Some Ideas Survive and Others Die
+评分: 5.0
+价格: 38.85
+------------------------------------------
+排名: 7
+书名: Luis Paints the World
+评分: 3.0
+价格: 53.95
+------------------------------------------
+排名: 8
+书名: Luckiest Girl Alive
+评分: 3.0
+价格: 49.83
+------------------------------------------
+排名: 9
+书名: Lowriders to the Center of the Earth (Lowriders in Space #2)
+评分: 2.0
+价格: 51.51
+------------------------------------------
+排名: 10
+书名: Love Is a Mix Tape (Music #1)
+评分: 1.0
+价格: 18.03
+------------------------------------------
+排名: 11
+书名: Looking for Lovely: Collecting the Moments that Matter
+评分: 5.0
+价格: 29.14
+------------------------------------------
+排名: 12
+书名: Living Leadership by Insight: A Good Leader Achieves, a Great Leader Builds Monuments
+评分: 4.0
+价格: 46.91
+------------------------------------------
+排名: 13
+书名: Let It Out: A Journey Through Journaling
+评分: 5.0
+价格: 26.79
+------------------------------------------
+排名: 14
+书名: Lady Midnight (The Dark Artifices #1)
+评分: 5.0
+价格: 16.28
+------------------------------------------
+排名: 15
+书名: It's All Easy: Healthy, Delicious Weeknight Meals in under 30 Minutes
+评分: 1.0
+价格: 19.55
+------------------------------------------
+排名: 16
+书名: Island of Dragons (Unwanteds #7)
+评分: 1.0
+价格: 29.65
+------------------------------------------
+排名: 17
+书名: I Know What I'm Doing -- and Other Lies I Tell Myself: Dispatches from a Life Under Construction
+评分: 4.0
+价格: 25.98
+------------------------------------------
+排名: 18
+书名: I Am Pilgrim (Pilgrim #1)
+评分: 4.0
+价格: 10.60
+------------------------------------------
+排名: 19
+书名: Hyperbole and a Half: Unfortunate Situations, Flawed Coping Mechanisms, Mayhem, and Other Things That Happened
+评分: 5.0
+价格: 14.75
+------------------------------------------
+排名: 20
+书名: Hush, Hush (Hush, Hush #1)
+评分: 3.0
+价格: 47.02
+------------------------------------------
+排名: 1
+书名: Hold Your Breath (Search and Rescue #1)
+评分: 1.0
+价格: 28.82
+------------------------------------------
+排名: 2
+书名: Hamilton: The Revolution
+评分: 3.0
+价格: 58.79
+------------------------------------------
+排名: 3
+书名: Greek Mythic History
+评分: 5.0
+价格: 10.23
+------------------------------------------
+排名: 4
+书名: God: The Most Unpleasant Character in All Fiction
+评分: 5.0
+价格: 30.03
+------------------------------------------
+排名: 5
+书名: Glory over Everything: Beyond The Kitchen House
+评分: 3.0
+价格: 45.84
+------------------------------------------
+排名: 6
+书名: Feathers: Displays of Brilliant Plumage
+评分: 3.0
+价格: 49.05
+------------------------------------------
+排名: 7
+书名: Far & Away: Places on the Brink of Change: Seven Continents, Twenty-Five Years
+评分: 4.0
+价格: 15.06
+------------------------------------------
+排名: 8
+书名: Every Last Word
+评分: 3.0
+价格: 46.47
+------------------------------------------
+排名: 9
+书名: Eligible (The Austen Project #4)
+评分: 3.0
+价格: 27.09
+------------------------------------------
+排名: 10
+书名: El Deafo
+评分: 5.0
+价格: 57.62
+------------------------------------------
+排名: 11
+书名: Eight Hundred Grapes
+评分: 4.0
+价格: 14.39
+------------------------------------------
+排名: 12
+书名: Eaternity: More than 150 Deliciously Easy Vegan Recipes for a Long, Healthy, Satisfied, Joyful Life
+评分: 5.0
+价格: 51.75
+------------------------------------------
+排名: 13
+书名: Eat Fat, Get Thin
+评分: 2.0
+价格: 54.07
+------------------------------------------
+排名: 14
+书名: Don't Get Caught
+评分: 1.0
+价格: 55.35
+------------------------------------------
+排名: 15
+书名: Doctor Sleep (The Shining #2)
+评分: 2.0
+价格: 40.12
+------------------------------------------
+排名: 16
+书名: Demigods & Magicians: Percy and Annabeth Meet the Kanes (Percy Jackson & Kane Chronicles Crossover #1-3)
+评分: 5.0
+价格: 37.51
+------------------------------------------
+排名: 17
+书名: Dear Mr. Knightley
+评分: 5.0
+价格: 11.21
+------------------------------------------
+排名: 18
+书名: Daily Fantasy Sports
+评分: 1.0
+价格: 36.58
+------------------------------------------
+排名: 19
+书名: Crazy Love: Overwhelmed by a Relentless God
+评分: 2.0
+价格: 47.72
+------------------------------------------
+排名: 20
+书名: Cometh the Hour (The Clifton Chronicles #6)
+评分: 3.0
+价格: 25.01
+------------------------------------------
+排名: 1
+书名: Code Name Verity (Code Name Verity #1)
+评分: 4.0
+价格: 22.13
+------------------------------------------
+排名: 2
+书名: Clockwork Angel (The Infernal Devices #1)
+评分: 1.0
+价格: 44.14
+------------------------------------------
+排名: 3
+书名: City of Glass (The Mortal Instruments #3)
+评分: 4.0
+价格: 56.02
+------------------------------------------
+排名: 4
+书名: City of Fallen Angels (The Mortal Instruments #4)
+评分: 4.0
+价格: 11.23
+------------------------------------------
+排名: 5
+书名: City of Bones (The Mortal Instruments #1)
+评分: 1.0
+价格: 43.28
+------------------------------------------
+排名: 6
+书名: City of Ashes (The Mortal Instruments #2)
+评分: 1.0
+价格: 47.27
+------------------------------------------
+排名: 7
+书名: Cell
+评分: 4.0
+价格: 20.29
+------------------------------------------
+排名: 8
+书名: Catching Jordan (Hundred Oaks)
+评分: 3.0
+价格: 50.83
+------------------------------------------
+排名: 9
+书名: Carry On, Warrior: Thoughts on Life Unarmed
+评分: 3.0
+价格: 31.85
+------------------------------------------
+排名: 10
+书名: Carrie
+评分: 2.0
+价格: 46.23
+------------------------------------------
+排名: 11
+书名: Buying In: The Secret Dialogue Between What We Buy and Who We Are
+评分: 4.0
+价格: 37.80
+------------------------------------------
+排名: 12
+书名: Brain on Fire: My Month of Madness
+评分: 5.0
+价格: 49.32
+------------------------------------------
+排名: 13
+书名: Batman: Europa
+评分: 2.0
+价格: 32.01
+------------------------------------------
+排名: 14
+书名: Barefoot Contessa Back to Basics
+评分: 1.0
+价格: 28.01
+------------------------------------------
+排名: 15
+书名: Barefoot Contessa at Home: Everyday Recipes You'll Make Over and Over Again
+评分: 5.0
+价格: 50.62
+------------------------------------------
+排名: 16
+书名: Balloon Animals
+评分: 3.0
+价格: 17.03
+------------------------------------------
+排名: 17
+书名: Art Ops Vol. 1
+评分: 3.0
+价格: 48.80
+------------------------------------------
+排名: 18
+书名: Aristotle and Dante Discover the Secrets of the Universe (Aristotle and Dante Discover the Secrets of the Universe #1)
+评分: 4.0
+价格: 58.14
+------------------------------------------
+排名: 19
+书名: Angels Walking (Angels Walking #1)
+评分: 2.0
+价格: 34.20
+------------------------------------------
+排名: 20
+书名: Angels & Demons (Robert Langdon #1)
+评分: 3.0
+价格: 51.48
+------------------------------------------
+排名: 1
+书名: All the Light We Cannot See
+评分: 5.0
+价格: 29.87
+------------------------------------------
+排名: 2
+书名: Adulthood Is a Myth: A "Sarah's Scribbles" Collection
+评分: 2.0
+价格: 10.90
+------------------------------------------
+排名: 3
+书名: Abstract City
+评分: 5.0
+价格: 56.37
+------------------------------------------
+排名: 4
+书名: A Time of Torment (Charlie Parker #14)
+评分: 5.0
+价格: 48.35
+------------------------------------------
+排名: 5
+书名: A Study in Scarlet (Sherlock Holmes #1)
+评分: 2.0
+价格: 16.73
+------------------------------------------
+排名: 6
+书名: A Series of Catastrophes and Miracles: A True Story of Love, Science, and Cancer
+评分: 2.0
+价格: 56.48
+------------------------------------------
+排名: 7
+书名: A People's History of the United States
+评分: 2.0
+价格: 40.79
+------------------------------------------
+排名: 8
+书名: A Man Called Ove
+评分: 1.0
+价格: 39.72
+------------------------------------------
+排名: 9
+书名: A Distant Mirror: The Calamitous 14th Century
+评分: 3.0
+价格: 14.58
+------------------------------------------
+排名: 10
+书名: A Brush of Wings (Angels Walking #3)
+评分: 1.0
+价格: 55.51
+------------------------------------------
+排名: 11
+书名: 1491: New Revelations of the Americas Before Columbus
+评分: 3.0
+价格: 21.80
+------------------------------------------
+排名: 12
+书名: The Three Searches, Meaning, and the Story
+评分: 3.0
+价格: 13.33
+------------------------------------------
+排名: 13
+书名: Searching for Meaning in Gailana
+评分: 1.0
+价格: 38.73
+------------------------------------------
+排名: 14
+书名: Rook
+评分: 4.0
+价格: 37.86
+------------------------------------------
+排名: 15
+书名: My Kitchen Year: 136 Recipes That Saved My Life
+评分: 2.0
+价格: 11.53
+------------------------------------------
+排名: 16
+书名: 13 Hours: The Inside Account of What Really Happened In Benghazi
+评分: 1.0
+价格: 27.06
+------------------------------------------
+排名: 17
+书名: Will You Won't You Want Me?
+评分: 3.0
+价格: 13.86
+------------------------------------------
+排名: 18
+书名: Tipping Point for Planet Earth: How Close Are We to the Edge?
+评分: 1.0
+价格: 37.55
+------------------------------------------
+排名: 19
+书名: The Star-Touched Queen
+评分: 5.0
+价格: 32.30
+------------------------------------------
+排名: 20
+书名: The Silent Sister (Riley MacPherson #1)
+评分: 5.0
+价格: 46.29
+------------------------------------------
+排名: 1
+书名: The Midnight Watch: A Novel of the Titanic and the Californian
+评分: 1.0
+价格: 26.20
+------------------------------------------
+排名: 2
+书名: The Lonely City: Adventures in the Art of Being Alone
+评分: 2.0
+价格: 33.26
+------------------------------------------
+排名: 3
+书名: The Gray Rhino: How to Recognize and Act on the Obvious Dangers We Ignore
+评分: 4.0
+价格: 59.15
+------------------------------------------
+排名: 4
+书名: The Golden Condom: And Other Essays on Love Lost and Found
+评分: 1.0
+价格: 39.43
+------------------------------------------
+排名: 5
+书名: The Epidemic (The Program 0.6)
+评分: 5.0
+价格: 14.44
+------------------------------------------
+排名: 6
+书名: The Dinner Party
+评分: 2.0
+价格: 56.54
+------------------------------------------
+排名: 7
+书名: The Diary of a Young Girl
+评分: 3.0
+价格: 59.90
+------------------------------------------
+排名: 8
+书名: The Children
+评分: 3.0
+价格: 11.88
+------------------------------------------
+排名: 9
+书名: Stars Above (The Lunar Chronicles #4.5)
+评分: 2.0
+价格: 48.05
+------------------------------------------
+排名: 10
+书名: Snatched: How A Drug Queen Went Undercover for the DEA and Was Kidnapped By Colombian Guerillas
+评分: 3.0
+价格: 21.21
+------------------------------------------
+排名: 11
+书名: Raspberry Pi Electronics Projects for the Evil Genius
+评分: 4.0
+价格: 49.67
+------------------------------------------
+排名: 12
+书名: Quench Your Own Thirst: Business Lessons Learned Over a Beer or Two
+评分: 1.0
+价格: 43.14
+------------------------------------------
+排名: 13
+书名: Psycho: Sanitarium (Psycho #1.5)
+评分: 5.0
+价格: 36.97
+------------------------------------------
+排名: 14
+书名: Poisonous (Max Revere Novels #3)
+评分: 3.0
+价格: 26.80
+------------------------------------------
+排名: 15
+书名: One with You (Crossfire #5)
+评分: 4.0
+价格: 15.71
+------------------------------------------
+排名: 16
+书名: No Love Allowed (Dodge Cove #1)
+评分: 4.0
+价格: 54.65
+------------------------------------------
+排名: 17
+书名: Murder at the 42nd Street Library (Raymond Ambler #1)
+评分: 4.0
+价格: 54.36
+------------------------------------------
+排名: 18
+书名: Most Wanted
+评分: 3.0
+价格: 35.28
+------------------------------------------
+排名: 19
+书名: Love, Lies and Spies
+评分: 2.0
+价格: 20.55
+------------------------------------------
+排名: 20
+书名: How to Speak Golf: An Illustrated Guide to Links Lingo
+评分: 5.0
+价格: 58.32
+------------------------------------------
+排名: 1
+书名: Hide Away (Eve Duncan #20)
+评分: 1.0
+价格: 11.84
+------------------------------------------
+排名: 2
+书名: Furiously Happy: A Funny Book About Horrible Things
+评分: 4.0
+价格: 41.46
+------------------------------------------
+排名: 3
+书名: Everyday Italian: 125 Simple and Delicious Recipes
+评分: 5.0
+价格: 20.10
+------------------------------------------
+排名: 4
+书名: Equal Is Unfair: America's Misguided Fight Against Income Inequality
+评分: 1.0
+价格: 56.86
+------------------------------------------
+排名: 5
+书名: Eleanor & Park
+评分: 5.0
+价格: 56.51
+------------------------------------------
+排名: 6
+书名: Dirty (Dive Bar #1)
+评分: 4.0
+价格: 40.83
+------------------------------------------
+排名: 7
+书名: Can You Keep a Secret? (Fear Street Relaunch #4)
+评分: 1.0
+价格: 48.64
+------------------------------------------
+排名: 8
+书名: Boar Island (Anna Pigeon #19)
+评分: 3.0
+价格: 59.48
+------------------------------------------
+排名: 9
+书名: A Paris Apartment
+评分: 4.0
+价格: 39.01
+------------------------------------------
+排名: 10
+书名: A la Mode: 120 Recipes in 60 Pairings: Pies, Tarts, Cakes, Crisps, and More Topped with Ice Cream, Gelato, Frozen Custard, and More
+评分: 1.0
+价格: 38.77
+------------------------------------------
+排名: 11
+书名: Troublemaker: Surviving Hollywood and Scientology
+评分: 2.0
+价格: 48.39
+------------------------------------------
+排名: 12
+书名: The Widow
+评分: 2.0
+价格: 27.26
+------------------------------------------
+排名: 13
+书名: The Sleep Revolution: Transforming Your Life, One Night at a Time
+评分: 4.0
+价格: 11.68
+------------------------------------------
+排名: 14
+书名: The Improbability of Love
+评分: 1.0
+价格: 59.45
+------------------------------------------
+排名: 15
+书名: The Art of Startup Fundraising
+评分: 3.0
+价格: 21.00
+------------------------------------------
+排名: 16
+书名: Take Me Home Tonight (Rock Star Romance #3)
+评分: 3.0
+价格: 53.98
+------------------------------------------
+排名: 17
+书名: Sleeping Giants (Themis Files #1)
+评分: 1.0
+价格: 48.74
+------------------------------------------
+排名: 18
+书名: Setting the World on Fire: The Brief, Astonishing Life of St. Catherine of Siena
+评分: 2.0
+价格: 21.15
+------------------------------------------
+排名: 19
+书名: Playing with Fire
+评分: 3.0
+价格: 13.71
+------------------------------------------
+排名: 20
+书名: Off the Hook (Fishing for Trouble #1)
+评分: 3.0
+价格: 47.67
+------------------------------------------
+排名: 1
+书名: Mothering Sunday
+评分: 2.0
+价格: 13.34
+------------------------------------------
+排名: 2
+书名: Mother, Can You Not?
+评分: 5.0
+价格: 16.89
+------------------------------------------
+排名: 3
+书名: M Train
+评分: 1.0
+价格: 27.18
+------------------------------------------
+排名: 4
+书名: Lilac Girls
+评分: 2.0
+价格: 17.28
+------------------------------------------
+排名: 5
+书名: Lies and Other Acts of Love
+评分: 1.0
+价格: 45.14
+------------------------------------------
+排名: 6
+书名: Lab Girl
+评分: 1.0
+价格: 40.85
+------------------------------------------
+排名: 7
+书名: Keep Me Posted
+评分: 4.0
+价格: 20.46
+------------------------------------------
+排名: 8
+书名: It Didn't Start with You: How Inherited Family Trauma Shapes Who We Are and How to End the Cycle
+评分: 3.0
+价格: 56.27
+------------------------------------------
+排名: 9
+书名: Grey (Fifty Shades #4)
+评分: 4.0
+价格: 48.49
+------------------------------------------
+排名: 10
+书名: Exit, Pursued by a Bear
+评分: 4.0
+价格: 51.34
+------------------------------------------
+排名: 11
+书名: Daredevils
+评分: 3.0
+价格: 16.34
+------------------------------------------
+排名: 12
+书名: Cravings: Recipes for What You Want to Eat
+评分: 3.0
+价格: 20.50
+------------------------------------------
+排名: 13
+书名: Born for This: How to Find the Work You Were Meant to Do
+评分: 5.0
+价格: 21.59
+------------------------------------------
+排名: 14
+书名: Arena
+评分: 4.0
+价格: 21.36
+------------------------------------------
+排名: 15
+书名: Adultery
+评分: 5.0
+价格: 20.88
+------------------------------------------
+排名: 16
+书名: A Mother's Reckoning: Living in the Aftermath of Tragedy
+评分: 3.0
+价格: 19.53
+------------------------------------------
+排名: 17
+书名: A Gentleman's Position (Society of Gentlemen #3)
+评分: 5.0
+价格: 14.75
+------------------------------------------
+排名: 18
+书名: 11/22/63
+评分: 3.0
+价格: 48.48
+------------------------------------------
+排名: 19
+书名: 10% Happier: How I Tamed the Voice in My Head, Reduced Stress Without Losing My Edge, and Found Self-Help That Actually Works
+评分: 2.0
+价格: 24.57
+------------------------------------------
+排名: 20
+书名: 10-Day Green Smoothie Cleanse: Lose Up to 15 Pounds in 10 Days!
+评分: 5.0
+价格: 49.71
+------------------------------------------
+排名: 1
+书名: Without Shame
+评分: 5.0
+价格: 48.27
+------------------------------------------
+排名: 2
+书名: Watchmen
+评分: 4.0
+价格: 58.05
+------------------------------------------
+排名: 3
+书名: Unlimited Intuition Now
+评分: 4.0
+价格: 58.87
+------------------------------------------
+排名: 4
+书名: Underlying Notes
+评分: 2.0
+价格: 11.82
+------------------------------------------
+排名: 5
+书名: The Shack
+评分: 1.0
+价格: 28.03
+------------------------------------------
+排名: 6
+书名: The New Brand You: Your New Image Makes the Sale for You
+评分: 5.0
+价格: 44.05
+------------------------------------------
+排名: 7
+书名: The Moosewood Cookbook: Recipes from Moosewood Restaurant, Ithaca, New York
+评分: 4.0
+价格: 12.34
+------------------------------------------
+排名: 8
+书名: The Flowers Lied
+评分: 2.0
+价格: 16.68
+------------------------------------------
+排名: 9
+书名: The Fabric of the Cosmos: Space, Time, and the Texture of Reality
+评分: 1.0
+价格: 55.91
+------------------------------------------
+排名: 10
+书名: The Book of Mormon
+评分: 3.0
+价格: 24.57
+------------------------------------------
+排名: 11
+书名: The Art and Science of Low Carbohydrate Living
+评分: 5.0
+价格: 52.98
+------------------------------------------
+排名: 12
+书名: The Alien Club
+评分: 1.0
+价格: 54.40
+------------------------------------------
+排名: 13
+书名: Suzie Snowflake: One beautiful flake (a self-esteem story)
+评分: 5.0
+价格: 54.81
+------------------------------------------
+排名: 14
+书名: Nap-a-Roo
+评分: 1.0
+价格: 25.08
+------------------------------------------
+排名: 15
+书名: NaNo What Now? Finding your editing process, revising your NaNoWriMo book and building a writing career through publishing and beyond
+评分: 4.0
+价格: 10.41
+------------------------------------------
+排名: 16
+书名: Modern Day Fables
+评分: 2.0
+价格: 47.44
+------------------------------------------
+排名: 17
+书名: If I Gave You God's Phone Number....: Searching for Spirituality in America
+评分: 1.0
+价格: 20.91
+------------------------------------------
+排名: 18
+书名: Fruits Basket, Vol. 9 (Fruits Basket #9)
+评分: 4.0
+价格: 33.95
+------------------------------------------
+排名: 19
+书名: Dress Your Family in Corduroy and Denim
+评分: 3.0
+价格: 43.68
+------------------------------------------
+排名: 20
+书名: Don't Forget Steven
+评分: 1.0
+价格: 33.23
+------------------------------------------
+排名: 1
+书名: Chernobyl 01:23:40: The Incredible True Story of the World's Worst Nuclear Disaster
+评分: 2.0
+价格: 35.92
+------------------------------------------
+排名: 2
+书名: Art and Fear: Observations on the Perils (and Rewards) of Artmaking
+评分: 4.0
+价格: 48.63
+------------------------------------------
+排名: 3
+书名: A Shard of Ice (The Black Symphony Saga #1)
+评分: 3.0
+价格: 56.63
+------------------------------------------
+排名: 4
+书名: A Hero's Curse (The Unseen Chronicles #1)
+评分: 3.0
+价格: 50.49
+------------------------------------------
+排名: 5
+书名: 23 Degrees South: A Tropical Tale of Changing Whether...
+评分: 2.0
+价格: 35.79
+------------------------------------------
+排名: 6
+书名: Zero to One: Notes on Startups, or How to Build the Future
+评分: 3.0
+价格: 34.06
+------------------------------------------
+排名: 7
+书名: Why Not Me?
+评分: 1.0
+价格: 17.76
+------------------------------------------
+排名: 8
+书名: When Breath Becomes Air
+评分: 2.0
+价格: 39.36
+------------------------------------------
+排名: 9
+书名: Vagabonding: An Uncommon Guide to the Art of Long-Term World Travel
+评分: 2.0
+价格: 36.94
+------------------------------------------
+排名: 10
+书名: The Unlikely Pilgrimage of Harold Fry (Harold Fry #1)
+评分: 5.0
+价格: 43.62
+------------------------------------------
+排名: 11
+书名: The New Drawing on the Right Side of the Brain
+评分: 3.0
+价格: 43.02
+------------------------------------------
+排名: 12
+书名: The Midnight Assassin: Panic, Scandal, and the Hunt for America's First Serial Killer
+评分: 4.0
+价格: 28.45
+------------------------------------------
+排名: 13
+书名: The Martian (The Martian #1)
+评分: 2.0
+价格: 41.39
+------------------------------------------
+排名: 14
+书名: The High Mountains of Portugal
+评分: 1.0
+价格: 51.15
+------------------------------------------
+排名: 15
+书名: The Grownup
+评分: 1.0
+价格: 35.88
+------------------------------------------
+排名: 16
+书名: The E-Myth Revisited: Why Most Small Businesses Don't Work and What to Do About It
+评分: 1.0
+价格: 36.91
+------------------------------------------
+排名: 17
+书名: South of Sunshine
+评分: 1.0
+价格: 28.93
+------------------------------------------
+排名: 18
+书名: Smarter Faster Better: The Secrets of Being Productive in Life and Business
+评分: 5.0
+价格: 38.89
+------------------------------------------
+排名: 19
+书名: Silence in the Dark (Logan Point #4)
+评分: 3.0
+价格: 58.33
+------------------------------------------
+排名: 20
+书名: Shadows of the Past (Logan Point #1)
+评分: 5.0
+价格: 39.67
+------------------------------------------
+排名: 1
+书名: Roller Girl
+评分: 5.0
+价格: 14.10
+------------------------------------------
+排名: 2
+书名: Rising Strong
+评分: 3.0
+价格: 21.82
+------------------------------------------
+排名: 3
+书名: Proofs of God: Classical Arguments from Tertullian to Barth
+评分: 1.0
+价格: 54.21
+------------------------------------------
+排名: 4
+书名: Please Kill Me: The Uncensored Oral History of Punk
+评分: 4.0
+价格: 31.19
+------------------------------------------
+排名: 5
+书名: Out of Print: City Lights Spotlight No. 14
+评分: 5.0
+价格: 53.64
+------------------------------------------
+排名: 6
+书名: My Life Next Door (My Life Next Door )
+评分: 5.0
+价格: 36.39
+------------------------------------------
+排名: 7
+书名: Miller's Valley
+评分: 2.0
+价格: 58.54
+------------------------------------------
+排名: 8
+书名: Man's Search for Meaning
+评分: 3.0
+价格: 29.48
+------------------------------------------
+排名: 9
+书名: Love That Boy: What Two Presidents, Eight Road Trips, and My Son Taught Me About a Parent's Expectations
+评分: 2.0
+价格: 25.06
+------------------------------------------
+排名: 10
+书名: Living Forward: A Proven Plan to Stop Drifting and Get the Life You Want
+评分: 3.0
+价格: 12.55
+------------------------------------------
+排名: 11
+书名: Les Fleurs du Mal
+评分: 5.0
+价格: 29.04
+------------------------------------------
+排名: 12
+书名: Left Behind (Left Behind #1)
+评分: 2.0
+价格: 40.72
+------------------------------------------
+排名: 13
+书名: Kill 'Em and Leave: Searching for James Brown and the American Soul
+评分: 5.0
+价格: 45.05
+------------------------------------------
+排名: 14
+书名: Kierkegaard: A Christian Missionary to Christians
+评分: 1.0
+价格: 47.13
+------------------------------------------
+排名: 15
+书名: John Vassos: Industrial Design for Modern Life
+评分: 4.0
+价格: 20.22
+------------------------------------------
+排名: 16
+书名: I'll Give You the Sun
+评分: 1.0
+价格: 56.48
+------------------------------------------
+排名: 17
+书名: I Will Find You
+评分: 1.0
+价格: 44.21
+------------------------------------------
+排名: 18
+书名: Hystopia: A Novel
+评分: 4.0
+价格: 21.96
+------------------------------------------
+排名: 19
+书名: Howl and Other Poems
+评分: 2.0
+价格: 40.45
+------------------------------------------
+排名: 20
+书名: History of Beauty
+评分: 4.0
+价格: 10.29
+------------------------------------------
+排名: 1
+书名: Heaven is for Real: A Little Boy's Astounding Story of His Trip to Heaven and Back
+评分: 2.0
+价格: 52.86
+------------------------------------------
+排名: 2
+书名: Future Shock (Future Shock #1)
+评分: 5.0
+价格: 55.65
+------------------------------------------
+排名: 3
+书名: Ender's Game (The Ender Quintet #1)
+评分: 1.0
+价格: 43.64
+------------------------------------------
+排名: 4
+书名: Diary of a Citizen Scientist: Chasing Tiger Beetles and Other New Ways of Engaging the World
+评分: 1.0
+价格: 28.41
+------------------------------------------
+排名: 5
+书名: Death by Leisure: A Cautionary Tale
+评分: 4.0
+价格: 37.51
+------------------------------------------
+排名: 6
+书名: Brilliant Beacons: A History of the American Lighthouse
+评分: 3.0
+价格: 11.45
+------------------------------------------
+排名: 7
+书名: Brazen: The Courage to Find the You That's Been Hiding
+评分: 2.0
+价格: 19.22
+------------------------------------------
+排名: 8
+书名: Between the World and Me
+评分: 4.0
+价格: 56.91
+------------------------------------------
+排名: 9
+书名: Being Mortal: Medicine and What Matters in the End
+评分: 4.0
+价格: 55.06
+------------------------------------------
+排名: 10
+书名: A Murder Over a Girl: Justice, Gender, Junior High
+评分: 3.0
+价格: 13.20
+------------------------------------------
+排名: 11
+书名: 32 Yolks
+评分: 2.0
+价格: 53.63
+------------------------------------------
+排名: 12
+书名: "Most Blessed of the Patriarchs": Thomas Jefferson and the Empire of the Imagination
+评分: 5.0
+价格: 44.48
+------------------------------------------
+排名: 13
+书名: You Are a Badass: How to Stop Doubting Your Greatness and Start Living an Awesome Life
+评分: 3.0
+价格: 12.08
+------------------------------------------
+排名: 14
+书名: Wildlife of New York: A Five-Borough Coloring Book
+评分: 2.0
+价格: 22.14
+------------------------------------------
+排名: 15
+书名: What Happened on Beale Street (Secrets of the South Mysteries #2)
+评分: 5.0
+价格: 25.37
+------------------------------------------
+排名: 16
+书名: Unreasonable Hope: Finding Faith in the God Who Brings Purpose to Your Pain
+评分: 2.0
+价格: 46.33
+------------------------------------------
+排名: 17
+书名: Under the Tuscan Sun
+评分: 3.0
+价格: 37.33
+------------------------------------------
+排名: 18
+书名: Toddlers Are A**holes: It's Not Your Fault
+评分: 1.0
+价格: 25.55
+------------------------------------------
+排名: 19
+书名: The Year of Living Biblically: One Man's Humble Quest to Follow the Bible as Literally as Possible
+评分: 1.0
+价格: 34.72
+------------------------------------------
+排名: 20
+书名: The Whale
+评分: 4.0
+价格: 35.96
+------------------------------------------
+排名: 1
+书名: The Story of Art
+评分: 4.0
+价格: 41.14
+------------------------------------------
+排名: 2
+书名: The Origin of Species
+评分: 4.0
+价格: 10.01
+------------------------------------------
+排名: 3
+书名: The Great Gatsby
+评分: 4.0
+价格: 36.05
+------------------------------------------
+排名: 4
+书名: The Good Girl
+评分: 3.0
+价格: 49.03
+------------------------------------------
+排名: 5
+书名: The Glass Castle
+评分: 1.0
+价格: 16.24
+------------------------------------------
+排名: 6
+书名: The Faith of Christopher Hitchens: The Restless Soul of the World's Most Notorious Atheist
+评分: 1.0
+价格: 39.55
+------------------------------------------
+排名: 7
+书名: The Drowning Girls
+评分: 3.0
+价格: 35.67
+------------------------------------------
+排名: 8
+书名: The Constant Princess (The Tudor Court #1)
+评分: 3.0
+价格: 16.62
+------------------------------------------
+排名: 9
+书名: The Bourne Identity (Jason Bourne #1)
+评分: 4.0
+价格: 42.78
+------------------------------------------
+排名: 10
+书名: The Bachelor Girl's Guide to Murder (Herringford and Watts Mysteries #1)
+评分: 5.0
+价格: 52.30
+------------------------------------------
+排名: 11
+书名: The Art Book
+评分: 2.0
+价格: 32.34
+------------------------------------------
+排名: 12
+书名: The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change
+评分: 4.0
+价格: 33.17
+------------------------------------------
+排名: 13
+书名: Team of Rivals: The Political Genius of Abraham Lincoln
+评分: 5.0
+价格: 20.12
+------------------------------------------
+排名: 14
+书名: Steal Like an Artist: 10 Things Nobody Told You About Being Creative
+评分: 2.0
+价格: 20.90
+------------------------------------------
+排名: 15
+书名: Sit, Stay, Love
+评分: 3.0
+价格: 20.90
+------------------------------------------
+排名: 16
+书名: Sister Dear
+评分: 4.0
+价格: 40.20
+------------------------------------------
+排名: 17
+书名: Shrunken Treasures: Literary Classics, Short, Sweet, and Silly
+评分: 3.0
+价格: 52.87
+------------------------------------------
+排名: 18
+书名: Rich Dad, Poor Dad
+评分: 1.0
+价格: 51.74
+------------------------------------------
+排名: 19
+书名: Raymie Nightingale
+评分: 2.0
+价格: 34.41
+------------------------------------------
+排名: 20
+书名: Playing from the Heart
+评分: 1.0
+价格: 32.38
+------------------------------------------
+排名: 1
+书名: Nightstruck: A Novel
+评分: 4.0
+价格: 50.35
+------------------------------------------
+排名: 2
+书名: Naturally Lean: 125 Nourishing Gluten-Free, Plant-Based Recipes--All Under 300 Calories
+评分: 5.0
+价格: 11.38
+------------------------------------------
+排名: 3
+书名: Meternity
+评分: 3.0
+价格: 43.58
+------------------------------------------
+排名: 4
+书名: Memoirs of a Geisha
+评分: 3.0
+价格: 49.67
+------------------------------------------
+排名: 5
+书名: Like Never Before (Walker Family #2)
+评分: 2.0
+价格: 28.77
+------------------------------------------
+排名: 6
+书名: Life of Pi
+评分: 4.0
+价格: 13.22
+------------------------------------------
+排名: 7
+书名: Leave This Song Behind: Teen Poetry at Its Best
+评分: 5.0
+价格: 51.17
+------------------------------------------
+排名: 8
+书名: King's Folly (The Kinsman Chronicles #1)
+评分: 5.0
+价格: 39.61
+------------------------------------------
+排名: 9
+书名: John Adams
+评分: 4.0
+价格: 57.43
+------------------------------------------
+排名: 10
+书名: How to Cook Everything Vegetarian: Simple Meatless Recipes for Great Food (How to Cook Everything)
+评分: 4.0
+价格: 46.01
+------------------------------------------
+排名: 11
+书名: How to Be a Domestic Goddess: Baking and the Art of Comfort Cooking
+评分: 2.0
+价格: 28.25
+------------------------------------------
+排名: 12
+书名: Good in Bed (Cannie Shapiro #1)
+评分: 5.0
+价格: 37.05
+------------------------------------------
+排名: 13
+书名: Fruits Basket, Vol. 7 (Fruits Basket #7)
+评分: 1.0
+价格: 19.57
+------------------------------------------
+排名: 14
+书名: For the Love: Fighting for Grace in a World of Impossible Standards
+评分: 3.0
+价格: 45.13
+------------------------------------------
+排名: 15
+书名: Finding God in the Ruins: How God Redeems Pain
+评分: 2.0
+价格: 46.64
+------------------------------------------
+排名: 16
+书名: Every Heart a Doorway (Every Heart A Doorway #1)
+评分: 5.0
+价格: 12.16
+------------------------------------------
+排名: 17
+书名: Delivering the Truth (Quaker Midwife Mystery #1)
+评分: 4.0
+价格: 20.89
+------------------------------------------
+排名: 18
+书名: Counted With the Stars (Out from Egypt #1)
+评分: 5.0
+价格: 17.97
+------------------------------------------
+排名: 19
+书名: Chronicles, Vol. 1
+评分: 2.0
+价格: 52.60
+------------------------------------------
+排名: 20
+书名: Blue Like Jazz: Nonreligious Thoughts on Christian Spirituality
+评分: 1.0
+价格: 25.77
+------------------------------------------
+排名: 1
+书名: Benjamin Franklin: An American Life
+评分: 3.0
+价格: 48.19
+------------------------------------------
+排名: 2
+书名: At The Existentialist Café: Freedom, Being, and apricot cocktails with: Jean-Paul Sartre, Simone de Beauvoir, Albert Camus, Martin Heidegger, Edmund Husserl, Karl Jaspers, Maurice Merleau-Ponty and others
+评分: 5.0
+价格: 29.93
+------------------------------------------
+排名: 3
+书名: A Summer In Europe
+评分: 2.0
+价格: 44.34
+------------------------------------------
+排名: 4
+书名: A Short History of Nearly Everything
+评分: 5.0
+价格: 52.40
+------------------------------------------
+排名: 5
+书名: A Gathering of Shadows (Shades of Magic #2)
+评分: 4.0
+价格: 44.81
+------------------------------------------
+排名: 6
+书名: The Sound Of Love
+评分: 5.0
+价格: 57.84
+------------------------------------------
+排名: 7
+书名: The Rise and Fall of the Third Reich: A History of Nazi Germany
+评分: 2.0
+价格: 39.67
+------------------------------------------
+排名: 8
+书名: The Perks of Being a Wallflower
+评分: 3.0
+价格: 55.02
+------------------------------------------
+排名: 9
+书名: The Mysterious Affair at Styles (Hercule Poirot #1)
+评分: 4.0
+价格: 24.80
+------------------------------------------
+排名: 10
+书名: The Man Who Mistook His Wife for a Hat and Other Clinical Tales
+评分: 4.0
+价格: 59.45
+------------------------------------------
+排名: 11
+书名: The Makings of a Fatherless Child
+评分: 2.0
+价格: 31.58
+------------------------------------------
+排名: 12
+书名: The Joy of Cooking
+评分: 4.0
+价格: 43.27
+------------------------------------------
+排名: 13
+书名: The Invention of Wings
+评分: 1.0
+价格: 37.34
+------------------------------------------
+排名: 14
+书名: The Hobbit (Middle-Earth Universe)
+评分: 5.0
+价格: 17.80
+------------------------------------------
+排名: 15
+书名: The Great Railway Bazaar
+评分: 1.0
+价格: 30.54
+------------------------------------------
+排名: 16
+书名: The Golden Compass (His Dark Materials #1)
+评分: 1.0
+价格: 18.77
+------------------------------------------
+排名: 17
+书名: The God Delusion
+评分: 3.0
+价格: 46.85
+------------------------------------------
+排名: 18
+书名: The Girl You Left Behind (The Girl You Left Behind #1)
+评分: 1.0
+价格: 15.79
+------------------------------------------
+排名: 19
+书名: The Fellowship of the Ring (The Lord of the Rings #1)
+评分: 2.0
+价格: 10.27
+------------------------------------------
+排名: 20
+书名: The Collected Poems of W.B. Yeats (The Collected Works of W.B. Yeats #1)
+评分: 5.0
+价格: 15.42
+------------------------------------------
+排名: 1
+书名: The Barefoot Contessa Cookbook
+评分: 5.0
+价格: 59.92
+------------------------------------------
+排名: 2
+书名: Tell the Wolves I'm Home
+评分: 2.0
+价格: 50.96
+------------------------------------------
+排名: 3
+书名: Ship Leaves Harbor: Essays on Travel by a Recovering Journeyman
+评分: 3.0
+价格: 30.60
+------------------------------------------
+排名: 4
+书名: Pride and Prejudice
+评分: 4.0
+价格: 19.27
+------------------------------------------
+排名: 5
+书名: Musicophilia: Tales of Music and the Brain
+评分: 1.0
+价格: 46.58
+------------------------------------------
+排名: 6
+书名: Mere Christianity
+评分: 3.0
+价格: 48.51
+------------------------------------------
+排名: 7
+书名: Me Before You (Me Before You #1)
+评分: 1.0
+价格: 19.02
+------------------------------------------
+排名: 8
+书名: In the Woods (Dublin Murder Squad #1)
+评分: 2.0
+价格: 38.38
+------------------------------------------
+排名: 9
+书名: In Cold Blood
+评分: 4.0
+价格: 49.98
+------------------------------------------
+排名: 10
+书名: How to Stop Worrying and Start Living
+评分: 5.0
+价格: 46.49
+------------------------------------------
+排名: 11
+书名: Give It Back
+评分: 2.0
+价格: 18.32
+------------------------------------------
+排名: 12
+书名: Girl, Interrupted
+评分: 3.0
+价格: 42.14
+------------------------------------------
+排名: 13
+书名: Fun Home: A Family Tragicomic
+评分: 4.0
+价格: 56.59
+------------------------------------------
+排名: 14
+书名: Fruits Basket, Vol. 6 (Fruits Basket #6)
+评分: 4.0
+价格: 20.96
+------------------------------------------
+排名: 15
+书名: Deception Point
+评分: 4.0
+价格: 40.32
+------------------------------------------
+排名: 16
+书名: Death Note, Vol. 6: Give-and-Take (Death Note #6)
+评分: 3.0
+价格: 36.39
+------------------------------------------
+排名: 17
+书名: Catherine the Great: Portrait of a Woman
+评分: 4.0
+价格: 58.55
+------------------------------------------
+排名: 18
+书名: Better Homes and Gardens New Cook Book
+评分: 3.0
+价格: 39.61
+------------------------------------------
+排名: 19
+书名: An Unquiet Mind: A Memoir of Moods and Madness
+评分: 3.0
+价格: 21.30
+------------------------------------------
+排名: 20
+书名: A Year in Provence (Provence #1)
+评分: 4.0
+价格: 56.88
+------------------------------------------
+排名: 1
+书名: World Without End (The Pillars of the Earth #2)
+评分: 4.0
+价格: 32.97
+------------------------------------------
+排名: 2
+书名: Will Grayson, Will Grayson (Will Grayson, Will Grayson)
+评分: 4.0
+价格: 47.31
+------------------------------------------
+排名: 3
+书名: Why Save the Bankers?: And Other Essays on Our Economic and Political Crisis
+评分: 2.0
+价格: 48.67
+------------------------------------------
+排名: 4
+书名: Where She Went (If I Stay #2)
+评分: 4.0
+价格: 41.73
+------------------------------------------
+排名: 5
+书名: What If?: Serious Scientific Answers to Absurd Hypothetical Questions
+评分: 4.0
+价格: 53.68
+------------------------------------------
+排名: 6
+书名: Two Summers
+评分: 1.0
+价格: 14.64
+------------------------------------------
+排名: 7
+书名: This Is Your Brain on Music: The Science of a Human Obsession
+评分: 1.0
+价格: 38.40
+------------------------------------------
+排名: 8
+书名: The Secret Garden
+评分: 4.0
+价格: 15.08
+------------------------------------------
+排名: 9
+书名: The Raven King (The Raven Cycle #4)
+评分: 2.0
+价格: 30.57
+------------------------------------------
+排名: 10
+书名: The Raven Boys (The Raven Cycle #1)
+评分: 4.0
+价格: 57.74
+------------------------------------------
+排名: 11
+书名: The Power Greens Cookbook: 140 Delicious Superfood Recipes
+评分: 5.0
+价格: 11.05
+------------------------------------------
+排名: 12
+书名: The Metamorphosis
+评分: 1.0
+价格: 28.58
+------------------------------------------
+排名: 13
+书名: The Mathews Men: Seven Brothers and the War Against Hitler's U-boats
+评分: 5.0
+价格: 42.91
+------------------------------------------
+排名: 14
+书名: The Little Paris Bookshop
+评分: 3.0
+价格: 24.73
+------------------------------------------
+排名: 15
+书名: The Hiding Place
+评分: 4.0
+价格: 55.91
+------------------------------------------
+排名: 16
+书名: The Grand Design
+评分: 3.0
+价格: 13.76
+------------------------------------------
+排名: 17
+书名: The Firm
+评分: 3.0
+价格: 45.56
+------------------------------------------
+排名: 18
+书名: The Fault in Our Stars
+评分: 1.0
+价格: 47.22
+------------------------------------------
+排名: 19
+书名: The False Prince (The Ascendance Trilogy #1)
+评分: 5.0
+价格: 56.00
+------------------------------------------
+排名: 20
+书名: The Expatriates
+评分: 2.0
+价格: 44.58
+------------------------------------------
+排名: 1
+书名: The Dream Thieves (The Raven Cycle #2)
+评分: 1.0
+价格: 34.50
+------------------------------------------
+排名: 2
+书名: The Darkest Corners
+评分: 5.0
+价格: 11.33
+------------------------------------------
+排名: 3
+书名: The Crossover
+评分: 4.0
+价格: 38.77
+------------------------------------------
+排名: 4
+书名: The 5th Wave (The 5th Wave #1)
+评分: 2.0
+价格: 11.83
+------------------------------------------
+排名: 5
+书名: Tell the Wind and Fire
+评分: 3.0
+价格: 45.51
+------------------------------------------
+排名: 6
+书名: Tell Me Three Things
+评分: 1.0
+价格: 41.81
+------------------------------------------
+排名: 7
+书名: Talking to Girls About Duran Duran: One Young Man's Quest for True Love and a Cooler Haircut
+评分: 4.0
+价格: 25.15
+------------------------------------------
+排名: 8
+书名: Siddhartha
+评分: 5.0
+价格: 34.22
+------------------------------------------
+排名: 9
+书名: Shiver (The Wolves of Mercy Falls #1)
+评分: 5.0
+价格: 16.23
+------------------------------------------
+排名: 10
+书名: Remember Me?
+评分: 3.0
+价格: 11.48
+------------------------------------------
+排名: 11
+书名: Red Dragon (Hannibal Lecter #1)
+评分: 3.0
+价格: 23.37
+------------------------------------------
+排名: 12
+书名: Peak: Secrets from the New Science of Expertise
+评分: 2.0
+价格: 16.28
+------------------------------------------
+排名: 13
+书名: My Mother Was Nuts
+评分: 4.0
+价格: 31.63
+------------------------------------------
+排名: 14
+书名: Mexican Today: New and Rediscovered Recipes for Contemporary Kitchens
+评分: 5.0
+价格: 24.91
+------------------------------------------
+排名: 15
+书名: Maybe Something Beautiful: How Art Transformed a Neighborhood
+评分: 1.0
+价格: 22.54
+------------------------------------------
+排名: 16
+书名: Lola and the Boy Next Door (Anna and the French Kiss #2)
+评分: 4.0
+价格: 23.63
+------------------------------------------
+排名: 17
+书名: Logan Kade (Fallen Crest High #5.5)
+评分: 2.0
+价格: 13.12
+------------------------------------------
+排名: 18
+书名: Last One Home (New Beginnings #1)
+评分: 3.0
+价格: 59.98
+------------------------------------------
+排名: 19
+书名: Killing Floor (Jack Reacher #1)
+评分: 4.0
+价格: 31.49
+------------------------------------------
+排名: 20
+书名: Kill the Boy Band
+评分: 5.0
+价格: 15.52
+------------------------------------------
+排名: 1
+书名: Isla and the Happily Ever After (Anna and the French Kiss #3)
+评分: 5.0
+价格: 48.13
+------------------------------------------
+排名: 2
+书名: If I Stay (If I Stay #1)
+评分: 5.0
+价格: 38.13
+------------------------------------------
+排名: 3
+书名: I Know Why the Caged Bird Sings (Maya Angelou's Autobiography #1)
+评分: 2.0
+价格: 36.55
+------------------------------------------
+排名: 4
+书名: Harry Potter and the Deathly Hallows (Harry Potter #7)
+评分: 1.0
+价格: 23.32
+------------------------------------------
+排名: 5
+书名: Fruits Basket, Vol. 5 (Fruits Basket #5)
+评分: 1.0
+价格: 16.33
+------------------------------------------
+排名: 6
+书名: Foundation (Foundation (Publication Order) #1)
+评分: 1.0
+价格: 32.42
+------------------------------------------
+排名: 7
+书名: Fool Me Once
+评分: 1.0
+价格: 16.96
+------------------------------------------
+排名: 8
+书名: Find Her (Detective D.D. Warren #8)
+评分: 1.0
+价格: 22.37
+------------------------------------------
+排名: 9
+书名: Evicted: Poverty and Profit in the American City
+评分: 1.0
+价格: 42.27
+------------------------------------------
+排名: 10
+书名: Drama
+评分: 2.0
+价格: 38.70
+------------------------------------------
+排名: 11
+书名: Dracula the Un-Dead
+评分: 5.0
+价格: 35.63
+------------------------------------------
+排名: 12
+书名: Digital Fortress
+评分: 5.0
+价格: 58.00
+------------------------------------------
+排名: 13
+书名: Death Note, Vol. 5: Whiteout (Death Note #5)
+评分: 1.0
+价格: 52.41
+------------------------------------------
+排名: 14
+书名: Data, A Love Story: How I Gamed Online Dating to Meet My Match
+评分: 3.0
+价格: 32.35
+------------------------------------------
+排名: 15
+书名: Critique of Pure Reason
+评分: 1.0
+价格: 20.75
+------------------------------------------
+排名: 16
+书名: Booked
+评分: 5.0
+价格: 17.49
+------------------------------------------
+排名: 17
+书名: Blue Lily, Lily Blue (The Raven Cycle #3)
+评分: 5.0
+价格: 34.13
+------------------------------------------
+排名: 18
+书名: Approval Junkie: Adventures in Caring Too Much
+评分: 5.0
+价格: 58.81
+------------------------------------------
+排名: 19
+书名: An Abundance of Katherines
+评分: 5.0
+价格: 10.00
+------------------------------------------
+排名: 20
+书名: America's War for the Greater Middle East: A Military History
+评分: 2.0
+价格: 51.22
+------------------------------------------
+排名: 1
+书名: Alight (The Generations Trilogy #2)
+评分: 4.0
+价格: 58.59
+------------------------------------------
+排名: 2
+书名: A Girl's Guide to Moving On (New Beginnings #2)
+评分: 1.0
+价格: 31.30
+------------------------------------------
+排名: 3
+书名: A Game of Thrones (A Song of Ice and Fire #1)
+评分: 2.0
+价格: 46.42
+------------------------------------------
+排名: 4
+书名: A Feast for Crows (A Song of Ice and Fire #4)
+评分: 4.0
+价格: 17.21
+------------------------------------------
+排名: 5
+书名: A Clash of Kings (A Song of Ice and Fire #2)
+评分: 3.0
+价格: 10.79
+------------------------------------------
+排名: 6
+书名: Vogue Colors A to Z: A Fashion Coloring Book
+评分: 4.0
+价格: 52.35
+------------------------------------------
+排名: 7
+书名: The Shining (The Shining #1)
+评分: 3.0
+价格: 27.88
+------------------------------------------
+排名: 8
+书名: The Pilgrim's Progress
+评分: 2.0
+价格: 50.26
+------------------------------------------
+排名: 9
+书名: The Perfect Play (Play by Play #1)
+评分: 3.0
+价格: 59.99
+------------------------------------------
+排名: 10
+书名: The Passion of Dolssa
+评分: 5.0
+价格: 28.32
+------------------------------------------
+排名: 11
+书名: The Jazz of Physics: The Secret Link Between Music and the Structure of the Universe
+评分: 3.0
+价格: 38.71
+------------------------------------------
+排名: 12
+书名: The Hunger Games (The Hunger Games #1)
+评分: 5.0
+价格: 29.85
+------------------------------------------
+排名: 13
+书名: The Hound of the Baskervilles (Sherlock Holmes #5)
+评分: 2.0
+价格: 14.82
+------------------------------------------
+排名: 14
+书名: The Gunning of America: Business and the Making of American Gun Culture
+评分: 4.0
+价格: 16.81
+------------------------------------------
+排名: 15
+书名: The Geography of Bliss: One Grump's Search for the Happiest Places in the World
+评分: 2.0
+价格: 28.23
+------------------------------------------
+排名: 16
+书名: The Demonists (Demonist #1)
+评分: 2.0
+价格: 52.11
+------------------------------------------
+排名: 17
+书名: The Demon Prince of Momochi House, Vol. 4 (The Demon Prince of Momochi House #4)
+评分: 2.0
+价格: 27.88
+------------------------------------------
+排名: 18
+书名: The Bone Hunters (Lexy Vaughan & Steven Macaulay #2)
+评分: 3.0
+价格: 59.71
+------------------------------------------
+排名: 19
+书名: The Beast (Black Dagger Brotherhood #14)
+评分: 5.0
+价格: 46.08
+------------------------------------------
+排名: 20
+书名: Some Women
+评分: 5.0
+价格: 13.73
+------------------------------------------
+排名: 1
+书名: Shopaholic Ties the Knot (Shopaholic #3)
+评分: 5.0
+价格: 48.39
+------------------------------------------
+排名: 2
+书名: Paper and Fire (The Great Library #2)
+评分: 5.0
+价格: 49.45
+------------------------------------------
+排名: 3
+书名: Outlander (Outlander #1)
+评分: 5.0
+价格: 19.67
+------------------------------------------
+排名: 4
+书名: Orchestra of Exiles: The Story of Bronislaw Huberman, the Israel Philharmonic, and the One Thousand Jews He Saved from Nazi Horrors
+评分: 3.0
+价格: 12.36
+------------------------------------------
+排名: 5
+书名: No One Here Gets Out Alive
+评分: 5.0
+价格: 20.02
+------------------------------------------
+排名: 6
+书名: Night Shift (Night Shift #1-20)
+评分: 4.0
+价格: 12.75
+------------------------------------------
+排名: 7
+书名: Needful Things
+评分: 4.0
+价格: 47.51
+------------------------------------------
+排名: 8
+书名: Mockingjay (The Hunger Games #3)
+评分: 4.0
+价格: 20.44
+------------------------------------------
+排名: 9
+书名: Misery
+评分: 2.0
+价格: 34.79
+------------------------------------------
+排名: 10
+书名: Little Women (Little Women #1)
+评分: 4.0
+价格: 28.07
+------------------------------------------
+排名: 11
+书名: It
+评分: 3.0
+价格: 25.01
+------------------------------------------
+排名: 12
+书名: Harry Potter and the Sorcerer's Stone (Harry Potter #1)
+评分: 3.0
+价格: 13.90
+------------------------------------------
+排名: 13
+书名: Harry Potter and the Prisoner of Azkaban (Harry Potter #3)
+评分: 4.0
+价格: 24.17
+------------------------------------------
+排名: 14
+书名: Harry Potter and the Order of the Phoenix (Harry Potter #5)
+评分: 4.0
+价格: 31.63
+------------------------------------------
+排名: 15
+书名: Harry Potter and the Half-Blood Prince (Harry Potter #6)
+评分: 5.0
+价格: 48.75
+------------------------------------------
+排名: 16
+书名: Harry Potter and the Chamber of Secrets (Harry Potter #2)
+评分: 1.0
+价格: 14.74
+------------------------------------------
+排名: 17
+书名: Gone with the Wind
+评分: 3.0
+价格: 32.49
+------------------------------------------
+排名: 18
+书名: God Is Not Great: How Religion Poisons Everything
+评分: 1.0
+价格: 27.80
+------------------------------------------
+排名: 19
+书名: Girl With a Pearl Earring
+评分: 1.0
+价格: 26.77
+------------------------------------------
+排名: 20
+书名: Fruits Basket, Vol. 4 (Fruits Basket #4)
+评分: 4.0
+价格: 50.44
+------------------------------------------
+排名: 1
+书名: Far From True (Promise Falls Trilogy #2)
+评分: 2.0
+价格: 34.93
+------------------------------------------
+排名: 2
+书名: Dark Lover (Black Dagger Brotherhood #1)
+评分: 1.0
+价格: 12.87
+------------------------------------------
+排名: 3
+书名: Confessions of a Shopaholic (Shopaholic #1)
+评分: 2.0
+价格: 48.94
+------------------------------------------
+排名: 4
+书名: Changing the Game (Play by Play #2)
+评分: 3.0
+价格: 13.38
+------------------------------------------
+排名: 5
+书名: Candide
+评分: 3.0
+价格: 58.63
+------------------------------------------
+排名: 6
+书名: Can You Keep a Secret?
+评分: 1.0
+价格: 21.94
+------------------------------------------
+排名: 7
+书名: Atlas Shrugged
+评分: 5.0
+价格: 26.58
+------------------------------------------
+排名: 8
+书名: Animal Farm
+评分: 3.0
+价格: 57.22
+------------------------------------------
+排名: 9
+书名: A Walk to Remember
+评分: 1.0
+价格: 56.43
+------------------------------------------
+排名: 10
+书名: A New Earth: Awakening to Your Life's Purpose
+评分: 5.0
+价格: 55.65
+------------------------------------------
+排名: 11
+书名: A History of God: The 4,000-Year Quest of Judaism, Christianity, and Islam
+评分: 1.0
+价格: 27.62
+------------------------------------------
+排名: 12
+书名: 'Salem's Lot
+评分: 4.0
+价格: 49.56
+------------------------------------------
+排名: 13
+书名: Zero History (Blue Ant #3)
+评分: 1.0
+价格: 34.77
+------------------------------------------
+排名: 14
+书名: Wuthering Heights
+评分: 3.0
+价格: 17.73
+------------------------------------------
+排名: 15
+书名: World War Z: An Oral History of the Zombie War
+评分: 1.0
+价格: 21.80
+------------------------------------------
+排名: 16
+书名: Wild: From Lost to Found on the Pacific Crest Trail
+评分: 3.0
+价格: 46.02
+------------------------------------------
+排名: 17
+书名: Where'd You Go, Bernadette
+评分: 1.0
+价格: 18.13
+------------------------------------------
+排名: 18
+书名: When You Are Engulfed in Flames
+评分: 5.0
+价格: 30.89
+------------------------------------------
+排名: 19
+书名: We the People: The Modern-Day Figures Who Have Reshaped and Affirmed the Founding Fathers' Vision of America
+评分: 3.0
+价格: 31.95
+------------------------------------------
+排名: 20
+书名: We Are All Completely Beside Ourselves
+评分: 1.0
+价格: 24.04
+------------------------------------------
+排名: 1
+书名: Walk the Edge (Thunder Road #2)
+评分: 3.0
+价格: 32.36
+------------------------------------------
+排名: 2
+书名: Voyager (Outlander #3)
+评分: 5.0
+价格: 21.07
+------------------------------------------
+排名: 3
+书名: Very Good Lives: The Fringe Benefits of Failure and the Importance of Imagination
+评分: 3.0
+价格: 50.66
+------------------------------------------
+排名: 4
+书名: Vegan Vegetarian Omnivore: Dinner for Everyone at the Table
+评分: 2.0
+价格: 13.66
+------------------------------------------
+排名: 5
+书名: Unstuffed: Decluttering Your Home, Mind, and Soul
+评分: 1.0
+价格: 58.09
+------------------------------------------
+排名: 6
+书名: Under the Banner of Heaven: A Story of Violent Faith
+评分: 1.0
+价格: 30.00
+------------------------------------------
+排名: 7
+书名: Two Boys Kissing
+评分: 2.0
+价格: 32.74
+------------------------------------------
+排名: 8
+书名: Twilight (Twilight #1)
+评分: 2.0
+价格: 41.93
+------------------------------------------
+排名: 9
+书名: Twenties Girl
+评分: 2.0
+价格: 42.80
+------------------------------------------
+排名: 10
+书名: Trespassing Across America: One Man's Epic, Never-Done-Before (and Sort of Illegal) Hike Across the Heartland
+评分: 1.0
+价格: 53.51
+------------------------------------------
+排名: 11
+书名: Three-Martini Lunch
+评分: 3.0
+价格: 23.21
+------------------------------------------
+排名: 12
+书名: Thinking, Fast and Slow
+评分: 1.0
+价格: 21.14
+------------------------------------------
+排名: 13
+书名: The Wild Robot
+评分: 3.0
+价格: 56.07
+------------------------------------------
+排名: 14
+书名: The Wicked + The Divine, Vol. 3: Commercial Suicide (The Wicked + The Divine)
+评分: 3.0
+价格: 14.41
+------------------------------------------
+排名: 15
+书名: The Undomestic Goddess
+评分: 4.0
+价格: 45.75
+------------------------------------------
+排名: 16
+书名: The Travelers
+评分: 1.0
+价格: 15.77
+------------------------------------------
+排名: 17
+书名: The Tipping Point: How Little Things Can Make a Big Difference
+评分: 2.0
+价格: 10.02
+------------------------------------------
+排名: 18
+书名: The Thing About Jellyfish
+评分: 1.0
+价格: 48.77
+------------------------------------------
+排名: 19
+书名: The Stand
+评分: 2.0
+价格: 57.86
+------------------------------------------
+排名: 20
+书名: The Smitten Kitchen Cookbook
+评分: 1.0
+价格: 23.59
+------------------------------------------
+排名: 1
+书名: The Silkworm (Cormoran Strike #2)
+评分: 5.0
+价格: 23.05
+------------------------------------------
+排名: 2
+书名: The Sandman, Vol. 3: Dream Country (The Sandman (volumes) #3)
+评分: 5.0
+价格: 55.55
+------------------------------------------
+排名: 3
+书名: The Rose & the Dagger (The Wrath and the Dawn #2)
+评分: 4.0
+价格: 58.64
+------------------------------------------
+排名: 4
+书名: The Road to Little Dribbling: Adventures of an American in Britain (Notes From a Small Island #2)
+评分: 1.0
+价格: 23.21
+------------------------------------------
+排名: 5
+书名: The Rise of Theodore Roosevelt (Theodore Roosevelt #1)
+评分: 3.0
+价格: 42.57
+------------------------------------------
+排名: 6
+书名: The Restaurant at the End of the Universe (Hitchhiker's Guide to the Galaxy #2)
+评分: 1.0
+价格: 10.92
+------------------------------------------
+排名: 7
+书名: The Rest Is Noise: Listening to the Twentieth Century
+评分: 1.0
+价格: 34.77
+------------------------------------------
+排名: 8
+书名: The Red Tent
+评分: 5.0
+价格: 35.66
+------------------------------------------
+排名: 9
+书名: The Purpose Driven Life: What on Earth Am I Here for?
+评分: 3.0
+价格: 37.19
+------------------------------------------
+排名: 10
+书名: The Purest Hook (Second Circle Tattoos #3)
+评分: 1.0
+价格: 12.25
+------------------------------------------
+排名: 11
+书名: The Picture of Dorian Gray
+评分: 2.0
+价格: 29.70
+------------------------------------------
+排名: 12
+书名: The Paris Wife
+评分: 3.0
+价格: 36.80
+------------------------------------------
+排名: 13
+书名: The Obsession
+评分: 1.0
+价格: 45.43
+------------------------------------------
+排名: 14
+书名: The Nightingale
+评分: 4.0
+价格: 26.26
+------------------------------------------
+排名: 15
+书名: The New Guy (and Other Senior Year Distractions)
+评分: 3.0
+价格: 44.92
+------------------------------------------
+排名: 16
+书名: The Nanny Diaries (Nanny #1)
+评分: 5.0
+价格: 52.53
+------------------------------------------
+排名: 17
+书名: The Name of God is Mercy
+评分: 2.0
+价格: 37.25
+------------------------------------------
+排名: 18
+书名: The Maze Runner (The Maze Runner #1)
+评分: 1.0
+价格: 20.93
+------------------------------------------
+排名: 19
+书名: The Lover's Dictionary
+评分: 2.0
+价格: 58.09
+------------------------------------------
+排名: 20
+书名: The Lonely Ones
+评分: 5.0
+价格: 43.59
+------------------------------------------
+排名: 1
+书名: The Lean Startup: How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses
+评分: 3.0
+价格: 33.92
+------------------------------------------
+排名: 2
+书名: The Last Painting of Sara de Vos
+评分: 2.0
+价格: 55.55
+------------------------------------------
+排名: 3
+书名: The Land of 10,000 Madonnas
+评分: 4.0
+价格: 29.64
+------------------------------------------
+排名: 4
+书名: The Infinities
+评分: 1.0
+价格: 27.41
+------------------------------------------
+排名: 5
+书名: The Husband's Secret
+评分: 5.0
+价格: 52.51
+------------------------------------------
+排名: 6
+书名: The Hitchhiker's Guide to the Galaxy (Hitchhiker's Guide to the Galaxy #1)
+评分: 3.0
+价格: 47.80
+------------------------------------------
+排名: 7
+书名: The Guns of August
+评分: 2.0
+价格: 14.54
+------------------------------------------
+排名: 8
+书名: The Guernsey Literary and Potato Peel Pie Society
+评分: 1.0
+价格: 49.53
+------------------------------------------
+排名: 9
+书名: The Goldfinch
+评分: 3.0
+价格: 43.58
+------------------------------------------
+排名: 10
+书名: The Giver (The Giver Quartet #1)
+评分: 1.0
+价格: 12.30
+------------------------------------------
+排名: 11
+书名: The Girl with All the Gifts
+评分: 3.0
+价格: 49.47
+------------------------------------------
+排名: 12
+书名: The Girl Who Played with Fire (Millennium Trilogy #2)
+评分: 2.0
+价格: 22.14
+------------------------------------------
+排名: 13
+书名: The Girl Who Kicked the Hornet's Nest (Millennium Trilogy #3)
+评分: 1.0
+价格: 57.48
+------------------------------------------
+排名: 14
+书名: The Exiled
+评分: 3.0
+价格: 43.45
+------------------------------------------
+排名: 15
+书名: The End of Faith: Religion, Terror, and the Future of Reason
+评分: 4.0
+价格: 22.13
+------------------------------------------
+排名: 16
+书名: The Elegant Universe: Superstrings, Hidden Dimensions, and the Quest for the Ultimate Theory
+评分: 4.0
+价格: 13.03
+------------------------------------------
+排名: 17
+书名: The Disappearing Spoon: And Other True Tales of Madness, Love, and the History of the World from the Periodic Table of the Elements
+评分: 5.0
+价格: 57.35
+------------------------------------------
+排名: 18
+书名: The Devil Wears Prada (The Devil Wears Prada #1)
+评分: 1.0
+价格: 44.29
+------------------------------------------
+排名: 19
+书名: The Demon-Haunted World: Science as a Candle in the Dark
+评分: 4.0
+价格: 52.25
+------------------------------------------
+排名: 20
+书名: The Day the Crayons Came Home (Crayons)
+评分: 5.0
+价格: 26.33
+------------------------------------------
+排名: 1
+书名: The Da Vinci Code (Robert Langdon #2)
+评分: 2.0
+价格: 22.96
+------------------------------------------
+排名: 2
+书名: The Cuckoo's Calling (Cormoran Strike #1)
+评分: 1.0
+价格: 19.21
+------------------------------------------
+排名: 3
+书名: The Complete Stories and Poems (The Works of Edgar Allan Poe [Cameo Edition])
+评分: 4.0
+价格: 26.78
+------------------------------------------
+排名: 4
+书名: The Complete Poems
+评分: 5.0
+价格: 41.32
+------------------------------------------
+排名: 5
+书名: The Catcher in the Rye
+评分: 1.0
+价格: 24.55
+------------------------------------------
+排名: 6
+书名: The Cat in the Hat (Beginner Books B-1)
+评分: 2.0
+价格: 16.26
+------------------------------------------
+排名: 7
+书名: The Case for Christ (Cases for Christianity)
+评分: 1.0
+价格: 47.84
+------------------------------------------
+排名: 8
+书名: The Book Thief
+评分: 2.0
+价格: 53.49
+------------------------------------------
+排名: 9
+书名: The Book of Basketball: The NBA According to The Sports Guy
+评分: 5.0
+价格: 44.84
+------------------------------------------
+排名: 10
+书名: The Blind Side: Evolution of a Game
+评分: 5.0
+价格: 53.71
+------------------------------------------
+排名: 11
+书名: The Autobiography of Malcolm X
+评分: 2.0
+价格: 23.43
+------------------------------------------
+排名: 12
+书名: The Art of Simple Food: Notes, Lessons, and Recipes from a Delicious Revolution
+评分: 3.0
+价格: 34.32
+------------------------------------------
+排名: 13
+书名: The Art of Fielding
+评分: 1.0
+价格: 22.10
+------------------------------------------
+排名: 14
+书名: Surely You're Joking, Mr. Feynman!: Adventures of a Curious Character
+评分: 2.0
+价格: 25.83
+------------------------------------------
+排名: 15
+书名: Stiff: The Curious Lives of Human Cadavers
+评分: 3.0
+价格: 36.74
+------------------------------------------
+排名: 16
+书名: Spilled Milk: Based on a True Story
+评分: 1.0
+价格: 49.51
+------------------------------------------
+排名: 17
+书名: Something Borrowed (Darcy & Rachel #1)
+评分: 5.0
+价格: 48.96
+------------------------------------------
+排名: 18
+书名: Something Blue (Darcy & Rachel #2)
+评分: 1.0
+价格: 54.62
+------------------------------------------
+排名: 19
+书名: Soldier (Talon #3)
+评分: 2.0
+价格: 24.72
+------------------------------------------
+排名: 20
+书名: Shopaholic & Baby (Shopaholic #5)
+评分: 2.0
+价格: 46.45
+------------------------------------------
+排名: 1
+书名: Seven Days in the Art World
+评分: 2.0
+价格: 52.33
+------------------------------------------
+排名: 2
+书名: Seven Brief Lessons on Physics
+评分: 4.0
+价格: 30.60
+------------------------------------------
+排名: 3
+书名: Scarlet (The Lunar Chronicles #2)
+评分: 4.0
+价格: 14.57
+------------------------------------------
+排名: 4
+书名: Sarah's Key
+评分: 1.0
+价格: 46.29
+------------------------------------------
+排名: 5
+书名: Saga, Volume 3 (Saga (Collected Editions) #3)
+评分: 5.0
+价格: 21.57
+------------------------------------------
+排名: 6
+书名: Running with Scissors
+评分: 4.0
+价格: 12.91
+------------------------------------------
+排名: 7
+书名: Rogue Lawyer (Rogue Lawyer #1)
+评分: 3.0
+价格: 50.11
+------------------------------------------
+排名: 8
+书名: Rise of the Rocket Girls: The Women Who Propelled Us, from Missiles to the Moon to Mars
+评分: 4.0
+价格: 41.67
+------------------------------------------
+排名: 9
+书名: Rework
+评分: 2.0
+价格: 44.88
+------------------------------------------
+排名: 10
+书名: Reservations for Two
+评分: 3.0
+价格: 11.10
+------------------------------------------
+排名: 11
+书名: Red: The True Story of Red Riding Hood
+评分: 3.0
+价格: 28.54
+------------------------------------------
+排名: 12
+书名: Ready Player One
+评分: 4.0
+价格: 19.07
+------------------------------------------
+排名: 13
+书名: Quiet: The Power of Introverts in a World That Can't Stop Talking
+评分: 1.0
+价格: 43.55
+------------------------------------------
+排名: 14
+书名: Prodigy: The Graphic Novel (Legend: The Graphic Novel #2)
+评分: 3.0
+价格: 43.63
+------------------------------------------
+排名: 15
+书名: Persepolis: The Story of a Childhood (Persepolis #1-2)
+评分: 1.0
+价格: 39.13
+------------------------------------------
+排名: 16
+书名: Packing for Mars: The Curious Science of Life in the Void
+评分: 2.0
+价格: 56.68
+------------------------------------------
+排名: 17
+书名: Outliers: The Story of Success
+评分: 1.0
+价格: 14.16
+------------------------------------------
+排名: 18
+书名: Original Fake
+评分: 3.0
+价格: 31.45
+------------------------------------------
+排名: 19
+书名: Orange Is the New Black
+评分: 2.0
+价格: 24.61
+------------------------------------------
+排名: 20
+书名: One for the Money (Stephanie Plum #1)
+评分: 2.0
+价格: 32.87
+------------------------------------------
+排名: 1
+书名: Notes from a Small Island (Notes From a Small Island #1)
+评分: 1.0
+价格: 40.17
+------------------------------------------
+排名: 2
+书名: Night (The Night Trilogy #1)
+评分: 1.0
+价格: 13.51
+------------------------------------------
+排名: 3
+书名: Neither Here nor There: Travels in Europe
+评分: 3.0
+价格: 38.95
+------------------------------------------
+排名: 4
+书名: Naked
+评分: 3.0
+价格: 31.69
+------------------------------------------
+排名: 5
+书名: Morning Star (Red Rising #3)
+评分: 1.0
+价格: 29.40
+------------------------------------------
+排名: 6
+书名: Miracles from Heaven: A Little Girl, Her Journey to Heaven, and Her Amazing Story of Healing
+评分: 1.0
+价格: 57.83
+------------------------------------------
+排名: 7
+书名: Midnight Riot (Peter Grant/ Rivers of London - books #1)
+评分: 2.0
+价格: 55.46
+------------------------------------------
+排名: 8
+书名: Me Talk Pretty One Day
+评分: 2.0
+价格: 57.60
+------------------------------------------
+排名: 9
+书名: Manuscript Found in Accra
+评分: 2.0
+价格: 34.98
+------------------------------------------
+排名: 10
+书名: Lust & Wonder
+评分: 2.0
+价格: 11.87
+------------------------------------------
+排名: 11
+书名: Lila (Gilead #3)
+评分: 3.0
+价格: 12.47
+------------------------------------------
+排名: 12
+书名: Life, the Universe and Everything (Hitchhiker's Guide to the Galaxy #3)
+评分: 2.0
+价格: 33.26
+------------------------------------------
+排名: 13
+书名: Life Without a Recipe
+评分: 5.0
+价格: 59.04
+------------------------------------------
+排名: 14
+书名: Life After Life
+评分: 2.0
+价格: 26.13
+------------------------------------------
+排名: 15
+书名: Letter to a Christian Nation
+评分: 1.0
+价格: 22.20
+------------------------------------------
+排名: 16
+书名: Let's Pretend This Never Happened: A Mostly True Memoir
+评分: 1.0
+价格: 45.11
+------------------------------------------
+排名: 17
+书名: Legend (Legend #1)
+评分: 4.0
+价格: 43.69
+------------------------------------------
+排名: 18
+书名: Lean In: Women, Work, and the Will to Lead
+评分: 1.0
+价格: 25.02
+------------------------------------------
+排名: 19
+书名: Lamb: The Gospel According to Biff, Christ's Childhood Pal
+评分: 5.0
+价格: 55.50
+------------------------------------------
+排名: 20
+书名: Lady Renegades (Rebel Belle #3)
+评分: 5.0
+价格: 53.04
+------------------------------------------
+排名: 1
+书名: Jurassic Park (Jurassic Park #1)
+评分: 1.0
+价格: 44.97
+------------------------------------------
+排名: 2
+书名: It's Never Too Late to Begin Again: Discovering Creativity and Meaning at Midlife and Beyond
+评分: 1.0
+价格: 42.38
+------------------------------------------
+排名: 3
+书名: Is Everyone Hanging Out Without Me? (And Other Concerns)
+评分: 3.0
+价格: 20.11
+------------------------------------------
+排名: 4
+书名: Into the Wild
+评分: 5.0
+价格: 56.70
+------------------------------------------
+排名: 5
+书名: Inferno (Robert Langdon #4)
+评分: 5.0
+价格: 41.00
+------------------------------------------
+排名: 6
+书名: In the Garden of Beasts: Love, Terror, and an American Family in Hitler's Berlin
+评分: 3.0
+价格: 28.85
+------------------------------------------
+排名: 7
+书名: If I Run (If I Run #1)
+评分: 4.0
+价格: 49.97
+------------------------------------------
+排名: 8
+书名: I've Got Your Number
+评分: 1.0
+价格: 19.69
+------------------------------------------
+排名: 9
+书名: I Am Malala: The Girl Who Stood Up for Education and Was Shot by the Taliban
+评分: 2.0
+价格: 28.88
+------------------------------------------
+排名: 10
+书名: Hungry Girl Clean & Hungry: Easy All-Natural Recipes for Healthy Eating in the Real World
+评分: 3.0
+价格: 33.14
+------------------------------------------
+排名: 11
+书名: House of Lost Worlds: Dinosaurs, Dynasties, and the Story of Life on Earth
+评分: 2.0
+价格: 43.70
+------------------------------------------
+排名: 12
+书名: House of Leaves
+评分: 1.0
+价格: 54.89
+------------------------------------------
+排名: 13
+书名: Horrible Bear!
+评分: 2.0
+价格: 37.52
+------------------------------------------
+排名: 14
+书名: Holidays on Ice
+评分: 2.0
+价格: 51.07
+------------------------------------------
+排名: 15
+书名: Heir to the Sky
+评分: 4.0
+价格: 44.07
+------------------------------------------
+排名: 16
+书名: Green Eggs and Ham (Beginner Books B-16)
+评分: 4.0
+价格: 10.79
+------------------------------------------
+排名: 17
+书名: Grayson, Vol 3: Nemesis (Grayson #3)
+评分: 1.0
+价格: 42.72
+------------------------------------------
+排名: 18
+书名: Gratitude
+评分: 5.0
+价格: 26.66
+------------------------------------------
+排名: 19
+书名: Gone Girl
+评分: 5.0
+价格: 37.60
+------------------------------------------
+排名: 20
+书名: Golden (Heart of Dread #3)
+评分: 4.0
+价格: 42.21
+------------------------------------------
+排名: 1
+书名: Girl in the Blue Coat
+评分: 2.0
+价格: 46.83
+------------------------------------------
+排名: 2
+书名: Fruits Basket, Vol. 3 (Fruits Basket #3)
+评分: 2.0
+价格: 45.17
+------------------------------------------
+排名: 3
+书名: Friday Night Lights: A Town, a Team, and a Dream
+评分: 3.0
+价格: 51.22
+------------------------------------------
+排名: 4
+书名: Fire Bound (Sea Haven/Sisters of the Heart #5)
+评分: 4.0
+价格: 21.28
+------------------------------------------
+排名: 5
+书名: Fifty Shades Freed (Fifty Shades #3)
+评分: 5.0
+价格: 15.36
+------------------------------------------
+排名: 6
+书名: Fellside
+评分: 1.0
+价格: 38.62
+------------------------------------------
+排名: 7
+书名: Extreme Prey (Lucas Davenport #26)
+评分: 3.0
+价格: 25.40
+------------------------------------------
+排名: 8
+书名: Eragon (The Inheritance Cycle #1)
+评分: 3.0
+价格: 43.87
+------------------------------------------
+排名: 9
+书名: Eclipse (Twilight #3)
+评分: 1.0
+价格: 18.74
+------------------------------------------
+排名: 10
+书名: Dune (Dune #1)
+评分: 1.0
+价格: 54.86
+------------------------------------------
+排名: 11
+书名: Dracula
+评分: 3.0
+价格: 52.62
+------------------------------------------
+排名: 12
+书名: Do Androids Dream of Electric Sheep? (Blade Runner #1)
+评分: 1.0
+价格: 51.48
+------------------------------------------
+排名: 13
+书名: Disrupted: My Misadventure in the Start-Up Bubble
+评分: 5.0
+价格: 15.28
+------------------------------------------
+排名: 14
+书名: Dead Wake: The Last Crossing of the Lusitania
+评分: 5.0
+价格: 39.24
+------------------------------------------
+排名: 15
+书名: David and Goliath: Underdogs, Misfits, and the Art of Battling Giants
+评分: 1.0
+价格: 17.81
+------------------------------------------
+排名: 16
+书名: Darkfever (Fever #1)
+评分: 1.0
+价格: 56.02
+------------------------------------------
+排名: 17
+书名: Dark Places
+评分: 5.0
+价格: 23.90
+------------------------------------------
+排名: 18
+书名: Crazy Rich Asians (Crazy Rich Asians #1)
+评分: 5.0
+价格: 49.13
+------------------------------------------
+排名: 19
+书名: Counting Thyme
+评分: 1.0
+价格: 10.62
+------------------------------------------
+排名: 20
+书名: Cosmos
+评分: 2.0
+价格: 36.17
+------------------------------------------
+排名: 1
+书名: Civilization and Its Discontents
+评分: 2.0
+价格: 59.95
+------------------------------------------
+排名: 2
+书名: Cinder (The Lunar Chronicles #1)
+评分: 1.0
+价格: 26.09
+------------------------------------------
+排名: 3
+书名: Catastrophic Happiness: Finding Joy in Childhood's Messy Years
+评分: 2.0
+价格: 37.35
+------------------------------------------
+排名: 4
+书名: Career of Evil (Cormoran Strike #3)
+评分: 2.0
+价格: 24.72
+------------------------------------------
+排名: 5
+书名: Breaking Dawn (Twilight #4)
+评分: 5.0
+价格: 35.28
+------------------------------------------
+排名: 6
+书名: Brave Enough
+评分: 5.0
+价格: 51.32
+------------------------------------------
+排名: 7
+书名: Boy Meets Boy
+评分: 3.0
+价格: 21.12
+------------------------------------------
+排名: 8
+书名: Born to Run: A Hidden Tribe, Superathletes, and the Greatest Race the World Has Never Seen
+评分: 2.0
+价格: 27.35
+------------------------------------------
+排名: 9
+书名: Blink: The Power of Thinking Without Thinking
+评分: 5.0
+价格: 21.74
+------------------------------------------
+排名: 10
+书名: Black Flags: The Rise of ISIS
+评分: 1.0
+价格: 40.87
+------------------------------------------
+排名: 11
+书名: Black Butler, Vol. 1 (Black Butler #1)
+评分: 1.0
+价格: 49.31
+------------------------------------------
+排名: 12
+书名: Big Little Lies
+评分: 1.0
+价格: 22.11
+------------------------------------------
+排名: 13
+书名: Between Shades of Gray
+评分: 5.0
+价格: 20.79
+------------------------------------------
+排名: 14
+书名: Best of My Love (Fool's Gold #20)
+评分: 2.0
+价格: 27.41
+------------------------------------------
+排名: 15
+书名: Beowulf
+评分: 2.0
+价格: 38.35
+------------------------------------------
+排名: 16
+书名: Beautiful Creatures (Caster Chronicles #1)
+评分: 5.0
+价格: 21.55
+------------------------------------------
+排名: 17
+书名: Awkward
+评分: 2.0
+价格: 38.02
+------------------------------------------
+排名: 18
+书名: Ash
+评分: 4.0
+价格: 22.06
+------------------------------------------
+排名: 19
+书名: Are We There Yet?
+评分: 3.0
+价格: 10.66
+------------------------------------------
+排名: 20
+书名: Are We Smart Enough to Know How Smart Animals Are?
+评分: 1.0
+价格: 56.58
+------------------------------------------
+排名: 1
+书名: Annie on My Mind
+评分: 5.0
+价格: 36.83
+------------------------------------------
+排名: 2
+书名: And Then There Were None
+评分: 2.0
+价格: 35.01
+------------------------------------------
+排名: 3
+书名: A Walk in the Woods: Rediscovering America on the Appalachian Trail
+评分: 4.0
+价格: 30.48
+------------------------------------------
+排名: 4
+书名: A Visit from the Goon Squad
+评分: 5.0
+价格: 14.08
+------------------------------------------
+排名: 5
+书名: A Storm of Swords (A Song of Ice and Fire #3)
+评分: 2.0
+价格: 31.22
+------------------------------------------
+排名: 6
+书名: A Heartbreaking Work of Staggering Genius
+评分: 5.0
+价格: 54.29
+------------------------------------------
+排名: 7
+书名: 8 Keys to Mental Health Through Exercise
+评分: 1.0
+价格: 31.04
+------------------------------------------
+排名: 8
+书名: #GIRLBOSS
+评分: 1.0
+价格: 50.96
+------------------------------------------
+排名: 9
+书名: The Suffragettes (Little Black Classics, #96)
+评分: 2.0
+价格: 11.89
+------------------------------------------
+排名: 10
+书名: The Sense of an Ending
+评分: 3.0
+价格: 31.38
+------------------------------------------
+排名: 11
+书名: The Sandman, Vol. 2: The Doll's House (The Sandman (volumes) #2)
+评分: 1.0
+价格: 54.81
+------------------------------------------
+排名: 12
+书名: The Course of Love
+评分: 3.0
+价格: 16.78
+------------------------------------------
+排名: 13
+书名: Sugar Rush (Offensive Line #2)
+评分: 1.0
+价格: 24.42
+------------------------------------------
+排名: 14
+书名: Saga, Volume 2 (Saga (Collected Editions) #2)
+评分: 3.0
+价格: 11.75
+------------------------------------------
+排名: 15
+书名: Run, Spot, Run: The Ethics of Keeping Pets
+评分: 1.0
+价格: 20.02
+------------------------------------------
+排名: 16
+书名: New Moon (Twilight #2)
+评分: 4.0
+价格: 12.86
+------------------------------------------
+排名: 17
+书名: Life
+评分: 5.0
+价格: 31.58
+------------------------------------------
+排名: 18
+书名: Kindle Paperwhite User's Guide
+评分: 3.0
+价格: 34.00
+------------------------------------------
+排名: 19
+书名: H is for Hawk
+评分: 5.0
+价格: 57.42
+------------------------------------------
+排名: 20
+书名: Girl Online On Tour (Girl Online #2)
+评分: 1.0
+价格: 53.47
+------------------------------------------
+排名: 1
+书名: Fruits Basket, Vol. 2 (Fruits Basket #2)
+评分: 5.0
+价格: 11.64
+------------------------------------------
+排名: 2
+书名: Diary of a Minecraft Zombie Book 1: A Scare of a Dare (An Unofficial Minecraft Book)
+评分: 4.0
+价格: 52.88
+------------------------------------------
+排名: 3
+书名: Y: The Last Man, Vol. 1: Unmanned (Y: The Last Man #1)
+评分: 4.0
+价格: 18.51
+------------------------------------------
+排名: 4
+书名: While You Were Mine
+评分: 5.0
+价格: 41.32
+------------------------------------------
+排名: 5
+书名: Where Lightning Strikes (Bleeding Stars #3)
+评分: 3.0
+价格: 39.77
+------------------------------------------
+排名: 6
+书名: When I'm Gone
+评分: 3.0
+价格: 51.96
+------------------------------------------
+排名: 7
+书名: Ways of Seeing
+评分: 5.0
+价格: 39.51
+------------------------------------------
+排名: 8
+书名: Vampire Knight, Vol. 1 (Vampire Knight #1)
+评分: 1.0
+价格: 15.40
+------------------------------------------
+排名: 9
+书名: Vampire Girl (Vampire Girl #1)
+评分: 2.0
+价格: 53.82
+------------------------------------------
+排名: 10
+书名: Twenty Love Poems and a Song of Despair
+评分: 4.0
+价格: 30.95
+------------------------------------------
+排名: 11
+书名: Travels with Charley: In Search of America
+评分: 5.0
+价格: 57.82
+------------------------------------------
+排名: 12
+书名: Three Wishes (River of Time: California #1)
+评分: 2.0
+价格: 44.18
+------------------------------------------
+排名: 13
+书名: This One Moment (Pushing Limits #1)
+评分: 1.0
+价格: 48.71
+------------------------------------------
+排名: 14
+书名: The Zombie Room
+评分: 5.0
+价格: 19.69
+------------------------------------------
+排名: 15
+书名: The Wicked + The Divine, Vol. 1: The Faust Act (The Wicked + The Divine)
+评分: 2.0
+价格: 36.52
+------------------------------------------
+排名: 16
+书名: The Tumor
+评分: 5.0
+价格: 41.56
+------------------------------------------
+排名: 17
+书名: The Story of Hong Gildong
+评分: 4.0
+价格: 43.19
+------------------------------------------
+排名: 18
+书名: The Silent Wife
+评分: 5.0
+价格: 12.34
+------------------------------------------
+排名: 19
+书名: The Silent Twin (Detective Jennifer Knight #3)
+评分: 3.0
+价格: 36.25
+------------------------------------------
+排名: 20
+书名: The Selfish Gene
+评分: 1.0
+价格: 29.45
+------------------------------------------
+排名: 1
+书名: The Secret Healer
+评分: 3.0
+价格: 34.56
+------------------------------------------
+排名: 2
+书名: The Sandman, Vol. 1: Preludes and Nocturnes (The Sandman (volumes) #1)
+评分: 3.0
+价格: 54.12
+------------------------------------------
+排名: 3
+书名: The Republic
+评分: 3.0
+价格: 33.78
+------------------------------------------
+排名: 4
+书名: The Odyssey
+评分: 3.0
+价格: 29.64
+------------------------------------------
+排名: 5
+书名: The No. 1 Ladies' Detective Agency (No. 1 Ladies' Detective Agency #1)
+评分: 4.0
+价格: 57.70
+------------------------------------------
+排名: 6
+书名: The Nicomachean Ethics
+评分: 1.0
+价格: 36.34
+------------------------------------------
+排名: 7
+书名: The Name of the Wind (The Kingkiller Chronicle #1)
+评分: 3.0
+价格: 50.59
+------------------------------------------
+排名: 8
+书名: The Mirror & the Maze (The Wrath and the Dawn #1.5)
+评分: 1.0
+价格: 29.38
+------------------------------------------
+排名: 9
+书名: The Little Prince
+评分: 2.0
+价格: 45.42
+------------------------------------------
+排名: 10
+书名: The Light of the Fireflies
+评分: 1.0
+价格: 54.43
+------------------------------------------
+排名: 11
+书名: The Last Girl (The Dominion Trilogy #1)
+评分: 2.0
+价格: 36.26
+------------------------------------------
+排名: 12
+书名: The Iliad
+评分: 1.0
+价格: 16.16
+------------------------------------------
+排名: 13
+书名: The Hook Up (Game On #1)
+评分: 5.0
+价格: 36.29
+------------------------------------------
+排名: 14
+书名: The Haters
+评分: 5.0
+价格: 27.89
+------------------------------------------
+排名: 15
+书名: The Girl You Lost
+评分: 5.0
+价格: 12.29
+------------------------------------------
+排名: 16
+书名: The Girl In The Ice (DCI Erika Foster #1)
+评分: 3.0
+价格: 15.85
+------------------------------------------
+排名: 17
+书名: The End of the Jesus Era (An Investigation #1)
+评分: 1.0
+价格: 14.40
+------------------------------------------
+排名: 18
+书名: The Edge of Reason (Bridget Jones #2)
+评分: 4.0
+价格: 19.18
+------------------------------------------
+排名: 19
+书名: The Complete Maus (Maus #1-2)
+评分: 3.0
+价格: 10.64
+------------------------------------------
+排名: 20
+书名: The Communist Manifesto
+评分: 3.0
+价格: 14.76
+------------------------------------------
+排名: 1
+书名: The Bhagavad Gita
+评分: 3.0
+价格: 57.49
+------------------------------------------
+排名: 2
+书名: The Bette Davis Club
+评分: 3.0
+价格: 30.66
+------------------------------------------
+排名: 3
+书名: The Art of Not Breathing
+评分: 4.0
+价格: 40.83
+------------------------------------------
+排名: 4
+书名: Taking Shots (Assassins #1)
+评分: 2.0
+价格: 18.88
+------------------------------------------
+排名: 5
+书名: Starlark
+评分: 3.0
+价格: 25.83
+------------------------------------------
+排名: 6
+书名: Skip Beat!, Vol. 01 (Skip Beat! #1)
+评分: 3.0
+价格: 42.12
+------------------------------------------
+排名: 7
+书名: Sister Sable (The Mad Queen #1)
+评分: 3.0
+价格: 13.33
+------------------------------------------
+排名: 8
+书名: Shatter Me (Shatter Me #1)
+评分: 1.0
+价格: 42.40
+------------------------------------------
+排名: 9
+书名: Shameless
+评分: 3.0
+价格: 58.35
+------------------------------------------
+排名: 10
+书名: Shadow Rites (Jane Yellowrock #10)
+评分: 4.0
+价格: 21.72
+------------------------------------------
+排名: 11
+书名: Settling the Score (The Summer Games #1)
+评分: 2.0
+价格: 44.91
+------------------------------------------
+排名: 12
+书名: Sense and Sensibility
+评分: 1.0
+价格: 37.46
+------------------------------------------
+排名: 13
+书名: Saga, Volume 1 (Saga (Collected Editions) #1)
+评分: 1.0
+价格: 28.48
+------------------------------------------
+排名: 14
+书名: Rhythm, Chord & Malykhin
+评分: 2.0
+价格: 28.34
+------------------------------------------
+排名: 15
+书名: Rat Queens, Vol. 1: Sass & Sorcery (Rat Queens (Collected Editions) #1-5)
+评分: 5.0
+价格: 46.96
+------------------------------------------
+排名: 16
+书名: Paradise Lost (Paradise #1)
+评分: 1.0
+价格: 24.96
+------------------------------------------
+排名: 17
+书名: Paper Girls, Vol. 1 (Paper Girls #1-5)
+评分: 4.0
+价格: 21.71
+------------------------------------------
+排名: 18
+书名: Ouran High School Host Club, Vol. 1 (Ouran High School Host Club #1)
+评分: 3.0
+价格: 29.87
+------------------------------------------
+排名: 19
+书名: Origins (Alphas 0.5)
+评分: 1.0
+价格: 28.99
+------------------------------------------
+排名: 20
+书名: One Second (Seven #7)
+评分: 2.0
+价格: 52.94
+------------------------------------------
+排名: 1
+书名: On the Road (Duluoz Legend)
+评分: 3.0
+价格: 32.36
+------------------------------------------
+排名: 2
+书名: Old Records Never Die: One Man's Quest for His Vinyl and His Past
+评分: 2.0
+价格: 55.66
+------------------------------------------
+排名: 3
+书名: Off Sides (Off #1)
+评分: 5.0
+价格: 39.45
+------------------------------------------
+排名: 4
+书名: Of Mice and Men
+评分: 2.0
+价格: 47.11
+------------------------------------------
+排名: 5
+书名: Myriad (Prentor #1)
+评分: 4.0
+价格: 58.75
+------------------------------------------
+排名: 6
+书名: My Perfect Mistake (Over the Top #1)
+评分: 2.0
+价格: 38.92
+------------------------------------------
+排名: 7
+书名: Ms. Marvel, Vol. 1: No Normal (Ms. Marvel (2014-2015) #1)
+评分: 4.0
+价格: 39.39
+------------------------------------------
+排名: 8
+书名: Meditations
+评分: 2.0
+价格: 25.89
+------------------------------------------
+排名: 9
+书名: Matilda
+评分: 1.0
+价格: 28.34
+------------------------------------------
+排名: 10
+书名: Lost Among the Living
+评分: 4.0
+价格: 27.70
+------------------------------------------
+排名: 11
+书名: Lord of the Flies
+评分: 3.0
+价格: 24.89
+------------------------------------------
+排名: 12
+书名: Listen to Me (Fusion #1)
+评分: 3.0
+价格: 58.99
+------------------------------------------
+排名: 13
+书名: Kitchens of the Great Midwest
+评分: 5.0
+价格: 57.20
+------------------------------------------
+排名: 14
+书名: Jane Eyre
+评分: 5.0
+价格: 38.43
+------------------------------------------
+排名: 15
+书名: Imperfect Harmony
+评分: 4.0
+价格: 34.74
+------------------------------------------
+排名: 16
+书名: Icing (Aces Hockey #2)
+评分: 4.0
+价格: 40.44
+------------------------------------------
+排名: 17
+书名: Hawkeye, Vol. 1: My Life as a Weapon (Hawkeye #1)
+评分: 3.0
+价格: 45.24
+------------------------------------------
+排名: 18
+书名: Having the Barbarian's Baby (Ice Planet Barbarians #7.5)
+评分: 4.0
+价格: 34.96
+------------------------------------------
+排名: 19
+书名: Giant Days, Vol. 1 (Giant Days #1-4)
+评分: 4.0
+价格: 56.76
+------------------------------------------
+排名: 20
+书名: Fruits Basket, Vol. 1 (Fruits Basket #1)
+评分: 5.0
+价格: 40.28
+------------------------------------------
+排名: 1
+书名: Frankenstein
+评分: 2.0
+价格: 38.00
+------------------------------------------
+排名: 2
+书名: Forever Rockers (The Rocker #12)
+评分: 3.0
+价格: 28.80
+------------------------------------------
+排名: 3
+书名: Fighting Fate (Fighting #6)
+评分: 3.0
+价格: 39.24
+------------------------------------------
+排名: 4
+书名: Emma
+评分: 2.0
+价格: 32.93
+------------------------------------------
+排名: 5
+书名: Eat, Pray, Love
+评分: 3.0
+价格: 51.32
+------------------------------------------
+排名: 6
+书名: Deep Under (Walker Security #1)
+评分: 5.0
+价格: 47.09
+------------------------------------------
+排名: 7
+书名: Choosing Our Religion: The Spiritual Lives of America's Nones
+评分: 4.0
+价格: 28.42
+------------------------------------------
+排名: 8
+书名: Charlie and the Chocolate Factory (Charlie Bucket #1)
+评分: 3.0
+价格: 22.85
+------------------------------------------
+排名: 9
+书名: Charity's Cross (Charles Towne Belles #4)
+评分: 1.0
+价格: 41.24
+------------------------------------------
+排名: 10
+书名: Bright Lines
+评分: 5.0
+价格: 39.07
+------------------------------------------
+排名: 11
+书名: Bridget Jones's Diary (Bridget Jones #1)
+评分: 1.0
+价格: 29.82
+------------------------------------------
+排名: 12
+书名: Bounty (Colorado Mountain #7)
+评分: 4.0
+价格: 37.26
+------------------------------------------
+排名: 13
+书名: Blood Defense (Samantha Brinkman #1)
+评分: 3.0
+价格: 20.30
+------------------------------------------
+排名: 14
+书名: Bleach, Vol. 1: Strawberry and the Soul Reapers (Bleach #1)
+评分: 5.0
+价格: 34.65
+------------------------------------------
+排名: 15
+书名: Beyond Good and Evil
+评分: 1.0
+价格: 43.38
+------------------------------------------
+排名: 16
+书名: Alice in Wonderland (Alice's Adventures in Wonderland #1)
+评分: 1.0
+价格: 55.53
+------------------------------------------
+排名: 17
+书名: Ajin: Demi-Human, Volume 1 (Ajin: Demi-Human #1)
+评分: 4.0
+价格: 57.06
+------------------------------------------
+排名: 18
+书名: A Spy's Devotion (The Regency Spies of London #1)
+评分: 5.0
+价格: 16.97
+------------------------------------------
+排名: 19
+书名: 1st to Die (Women's Murder Club #1)
+评分: 1.0
+价格: 53.98
+------------------------------------------
+排名: 20
+书名: 1,000 Places to See Before You Die
+评分: 5.0
+价格: 26.08
+------------------------------------------
diff --git a/project/pom.xml b/project/pom.xml
new file mode 100644
index 0000000..cafbee2
--- /dev/null
+++ b/project/pom.xml
@@ -0,0 +1,74 @@
+
+
+ 4.0.0
+
+ com.crawler
+ web-crawler
+ 1.0-SNAPSHOT
+ jar
+
+ Web Crawler
+ Multi-site web crawler with CLI, MVC, Command pattern and Strategy pattern
+
+
+ 11
+ 11
+ UTF-8
+
+
+
+
+ org.jsoup
+ jsoup
+ 1.16.1
+
+
+ com.google.code.gson
+ gson
+ 2.10.1
+
+
+ org.slf4j
+ slf4j-api
+ 2.0.9
+
+
+ org.slf4j
+ slf4j-simple
+ 2.0.9
+
+
+ info.picocli
+ picocli
+ 4.7.5
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.3.0
+
+
+
+ com.crawler.Main
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+ 11
+ 11
+
+
+
+
+
diff --git a/project/run.bat b/project/run.bat
new file mode 100644
index 0000000..ffa773c
--- /dev/null
+++ b/project/run.bat
@@ -0,0 +1,24 @@
+@echo off
+echo ========================================
+echo Web Crawler Application
+echo ========================================
+echo.
+
+if not exist "target\web-crawler-1.0-SNAPSHOT.jar" (
+ echo Compiling project...
+ mvn clean package
+ if errorlevel 1 (
+ echo Compilation failed!
+ pause
+ exit /b 1
+ )
+ echo.
+)
+
+echo Running crawler...
+echo.
+
+java -jar target\web-crawler-1.0-SNAPSHOT.jar %*
+
+echo.
+pause
diff --git a/project/src/main/java/CrawlerManager.java b/project/src/main/java/CrawlerManager.java
new file mode 100644
index 0000000..d40a482
--- /dev/null
+++ b/project/src/main/java/CrawlerManager.java
@@ -0,0 +1 @@
+// 此文件已废弃,请使用 main.CrawlerManager
diff --git a/project/src/main/java/cli/CrawlerCLI.java b/project/src/main/java/cli/CrawlerCLI.java
new file mode 100644
index 0000000..651828f
--- /dev/null
+++ b/project/src/main/java/cli/CrawlerCLI.java
@@ -0,0 +1,133 @@
+package cli;
+
+import command.*;
+import controller.CrawlerController;
+import exception.CrawlerException;
+import exception.CrawlerResult;
+import exception.ValidationException;
+import view.CrawlerView;
+
+import java.util.Arrays;
+
+public class CrawlerCLI {
+ private final CrawlerController controller;
+ private final CrawlerView view;
+ private final CommandRegistry commandRegistry;
+
+ public CrawlerCLI() {
+ this.controller = new CrawlerController();
+ this.view = new CrawlerView();
+ this.commandRegistry = new CommandRegistry();
+ initCommands();
+ }
+
+ public CrawlerCLI(String outputDir) {
+ this.controller = new CrawlerController(outputDir);
+ this.view = new CrawlerView();
+ this.commandRegistry = new CommandRegistry();
+ initCommands();
+ }
+
+ private void initCommands() {
+ commandRegistry.register(new RunAllCommand(controller));
+ commandRegistry.register(new ListCrawlersCommand(controller));
+ commandRegistry.register(new StatsCommand(controller));
+ commandRegistry.register(new ClearCommand(controller));
+ }
+
+ public void run(String[] args) {
+ view.showWelcome();
+
+ if (args == null || args.length == 0) {
+ view.showHelp();
+ return;
+ }
+
+ String commandName = args[0].toLowerCase().trim();
+
+ try {
+ switch (commandName) {
+ case "help":
+ case "-h":
+ case "--help":
+ view.showHelp();
+ break;
+
+ case "list":
+ case "ls":
+ handleList();
+ break;
+
+ case "run":
+ handleRun(args);
+ break;
+
+ case "run-all":
+ case "all":
+ handleRunAll();
+ break;
+
+ case "stats":
+ handleStats();
+ break;
+
+ case "clear":
+ handleClear();
+ break;
+
+ default:
+ view.showError("未知命令: " + commandName + "\n使用 'help' 查看可用命令");
+ }
+ } catch (ValidationException e) {
+ view.showError(e.getMessage());
+ view.showHelp();
+ } catch (CrawlerException e) {
+ view.showError("爬虫错误 [" + e.getErrorCode() + "]: " + e.getMessage());
+ } catch (Exception e) {
+ view.showError("系统错误: " + e.getMessage());
+ e.printStackTrace();
+ }
+ }
+
+ private void handleList() {
+ Command cmd = commandRegistry.getCommand("list");
+ cmd.execute();
+ view.showCrawlerList(controller.getAllCrawlerNames());
+ }
+
+ private void handleRun(String[] args) {
+ if (args.length < 2) {
+ view.showError("请指定爬虫名称\n示例: run 豆瓣电影Top250");
+ view.showCrawlerList(controller.getAllCrawlerNames());
+ return;
+ }
+
+ String crawlerName = args[1];
+ Command cmd = new RunSingleCommand(controller, crawlerName);
+ CrawlerResult result = cmd.execute();
+ view.showResult(result);
+ }
+
+ private void handleRunAll() {
+ Command cmd = commandRegistry.getCommand("run-all");
+ CrawlerResult result = cmd.execute();
+ view.showResult(result);
+ }
+
+ private void handleStats() {
+ Command cmd = commandRegistry.getCommand("stats");
+ CrawlerResult result = cmd.execute();
+ view.showMessage(result.getMessage());
+ }
+
+ private void handleClear() {
+ Command cmd = commandRegistry.getCommand("clear");
+ CrawlerResult result = cmd.execute();
+ view.showResult(result);
+ }
+
+ public static void main(String[] args) {
+ CrawlerCLI cli = new CrawlerCLI();
+ cli.run(args);
+ }
+}
diff --git a/project/src/main/java/com/crawler/Main.java b/project/src/main/java/com/crawler/Main.java
new file mode 100644
index 0000000..7450e33
--- /dev/null
+++ b/project/src/main/java/com/crawler/Main.java
@@ -0,0 +1,34 @@
+package com.crawler;
+
+import com.crawler.controller.CrawlerController;
+import picocli.CommandLine;
+import picocli.CommandLine.Command;
+import picocli.CommandLine.Option;
+
+@Command(name = "crawler", mixinStandardHelpOptions = true, version = "1.0",
+ description = "Web Crawler - Crawl Douban Movies, Douban Books, and Books to Scrape")
+public class Main implements Runnable {
+
+ @Option(names = {"-s", "--site"}, description = "Site to crawl: douban-movie, douban-book, books-to-scrape, all",
+ defaultValue = "all")
+ private String site;
+
+ @Option(names = {"-i", "--interactive"}, description = "Run in interactive mode")
+ private boolean interactive;
+
+ public static void main(String[] args) {
+ int exitCode = new CommandLine(new Main()).execute(args);
+ System.exit(exitCode);
+ }
+
+ @Override
+ public void run() {
+ CrawlerController controller = new CrawlerController();
+
+ if (interactive) {
+ controller.runInteractive();
+ } else {
+ controller.crawlBySite(site);
+ }
+ }
+}
diff --git a/project/src/main/java/com/crawler/command/Command.java b/project/src/main/java/com/crawler/command/Command.java
new file mode 100644
index 0000000..4a9ea49
--- /dev/null
+++ b/project/src/main/java/com/crawler/command/Command.java
@@ -0,0 +1,8 @@
+package com.crawler.command;
+
+import com.crawler.exception.CrawlerException;
+
+public interface Command {
+ void execute() throws CrawlerException;
+ String getDescription();
+}
diff --git a/project/src/main/java/com/crawler/command/CrawlAllCommand.java b/project/src/main/java/com/crawler/command/CrawlAllCommand.java
new file mode 100644
index 0000000..92e5842
--- /dev/null
+++ b/project/src/main/java/com/crawler/command/CrawlAllCommand.java
@@ -0,0 +1,37 @@
+package com.crawler.command;
+
+import com.crawler.exception.CrawlerException;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CrawlAllCommand implements Command {
+ private final List commands;
+ private final String description;
+
+ public CrawlAllCommand(String description) {
+ this.commands = new ArrayList<>();
+ this.description = description;
+ }
+
+ public void addCommand(Command command) {
+ commands.add(command);
+ }
+
+ @Override
+ public void execute() throws CrawlerException {
+ for (Command command : commands) {
+ try {
+ command.execute();
+ } catch (CrawlerException e) {
+ System.err.println("Error executing command: " + command.getDescription());
+ System.err.println("Error: " + e.getMessage());
+ }
+ }
+ }
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+}
diff --git a/project/src/main/java/com/crawler/command/CrawlCommand.java b/project/src/main/java/com/crawler/command/CrawlCommand.java
new file mode 100644
index 0000000..6534153
--- /dev/null
+++ b/project/src/main/java/com/crawler/command/CrawlCommand.java
@@ -0,0 +1,28 @@
+package com.crawler.command;
+
+import com.crawler.exception.CrawlerException;
+import com.crawler.strategy.CrawlerStrategy;
+import com.crawler.util.FileUtil;
+
+import java.util.List;
+
+public class CrawlCommand implements Command {
+ private final CrawlerStrategy strategy;
+ private final String description;
+
+ public CrawlCommand(CrawlerStrategy strategy, String description) {
+ this.strategy = strategy;
+ this.description = description;
+ }
+
+ @Override
+ public void execute() throws CrawlerException {
+ List data = strategy.crawl();
+ FileUtil.saveToJsonFile(data, strategy.getOutputFileName());
+ }
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+}
diff --git a/project/src/main/java/com/crawler/controller/CrawlerController.java b/project/src/main/java/com/crawler/controller/CrawlerController.java
new file mode 100644
index 0000000..5caa438
--- /dev/null
+++ b/project/src/main/java/com/crawler/controller/CrawlerController.java
@@ -0,0 +1,119 @@
+package com.crawler.controller;
+
+import com.crawler.command.Command;
+import com.crawler.command.CrawlAllCommand;
+import com.crawler.command.CrawlCommand;
+import com.crawler.exception.CrawlerException;
+import com.crawler.strategy.BooksToScrapeStrategy;
+import com.crawler.strategy.CrawlerStrategy;
+import com.crawler.strategy.DoubanBookStrategy;
+import com.crawler.strategy.DoubanMovieStrategy;
+import com.crawler.view.ConsoleView;
+
+import java.util.Scanner;
+
+public class CrawlerController {
+ private final ConsoleView view;
+ private final Scanner scanner;
+
+ public CrawlerController() {
+ this.view = new ConsoleView();
+ this.scanner = new Scanner(System.in);
+ }
+
+ public void runInteractive() {
+ view.displayWelcome();
+
+ while (true) {
+ view.displayMenu();
+ String input = scanner.nextLine().trim();
+
+ try {
+ int choice = Integer.parseInt(input);
+ switch (choice) {
+ case 1:
+ crawlDoubanMovies();
+ break;
+ case 2:
+ crawlDoubanBooks();
+ break;
+ case 3:
+ crawlBooksToScrape();
+ break;
+ case 4:
+ crawlAll();
+ break;
+ case 0:
+ view.displayGoodbye();
+ return;
+ default:
+ view.displayInvalidChoice();
+ }
+ } catch (NumberFormatException e) {
+ view.displayInvalidChoice();
+ }
+ }
+ }
+
+ public void crawlDoubanMovies() {
+ CrawlerStrategy> strategy = new DoubanMovieStrategy();
+ Command command = new CrawlCommand<>(strategy, "Douban Movies");
+ executeCommand(command, strategy.getOutputFileName());
+ }
+
+ public void crawlDoubanBooks() {
+ CrawlerStrategy> strategy = new DoubanBookStrategy();
+ Command command = new CrawlCommand<>(strategy, "Douban Books");
+ executeCommand(command, strategy.getOutputFileName());
+ }
+
+ public void crawlBooksToScrape() {
+ CrawlerStrategy> strategy = new BooksToScrapeStrategy();
+ Command command = new CrawlCommand<>(strategy, "Books to Scrape");
+ executeCommand(command, strategy.getOutputFileName());
+ }
+
+ public void crawlAll() {
+ CrawlAllCommand allCommand = new CrawlAllCommand("Crawl All");
+ allCommand.addCommand(new CrawlCommand<>(new DoubanMovieStrategy(), "Douban Movies"));
+ allCommand.addCommand(new CrawlCommand<>(new DoubanBookStrategy(), "Douban Books"));
+ allCommand.addCommand(new CrawlCommand<>(new BooksToScrapeStrategy(), "Books to Scrape"));
+
+ try {
+ view.displayCrawling("All Websites");
+ allCommand.execute();
+ view.displaySuccess("data/ (all files)");
+ } catch (CrawlerException e) {
+ view.displayError(e.getMessage());
+ }
+ }
+
+ public void crawlBySite(String site) {
+ switch (site.toLowerCase()) {
+ case "douban-movie":
+ crawlDoubanMovies();
+ break;
+ case "douban-book":
+ crawlDoubanBooks();
+ break;
+ case "books-to-scrape":
+ crawlBooksToScrape();
+ break;
+ case "all":
+ crawlAll();
+ break;
+ default:
+ view.displayError("Unknown site: " + site);
+ }
+ }
+
+ private void executeCommand(Command command, String fileName) {
+ try {
+ view.displayCrawling(command.getDescription());
+ command.execute();
+ view.displaySuccess(fileName);
+ } catch (CrawlerException e) {
+ view.displayError(e.getMessage());
+ }
+ }
+}
diff --git a/project/src/main/java/com/crawler/exception/CrawlerException.java b/project/src/main/java/com/crawler/exception/CrawlerException.java
new file mode 100644
index 0000000..5ac3e7a
--- /dev/null
+++ b/project/src/main/java/com/crawler/exception/CrawlerException.java
@@ -0,0 +1,11 @@
+package com.crawler.exception;
+
+public class CrawlerException extends Exception {
+ public CrawlerException(String message) {
+ super(message);
+ }
+
+ public CrawlerException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/project/src/main/java/com/crawler/exception/FileException.java b/project/src/main/java/com/crawler/exception/FileException.java
new file mode 100644
index 0000000..86d924a
--- /dev/null
+++ b/project/src/main/java/com/crawler/exception/FileException.java
@@ -0,0 +1,11 @@
+package com.crawler.exception;
+
+public class FileException extends CrawlerException {
+ public FileException(String message) {
+ super(message);
+ }
+
+ public FileException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/project/src/main/java/com/crawler/exception/NetworkException.java b/project/src/main/java/com/crawler/exception/NetworkException.java
new file mode 100644
index 0000000..8d8b9e7
--- /dev/null
+++ b/project/src/main/java/com/crawler/exception/NetworkException.java
@@ -0,0 +1,11 @@
+package com.crawler.exception;
+
+public class NetworkException extends CrawlerException {
+ public NetworkException(String message) {
+ super(message);
+ }
+
+ public NetworkException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/project/src/main/java/com/crawler/exception/ParseException.java b/project/src/main/java/com/crawler/exception/ParseException.java
new file mode 100644
index 0000000..9248f23
--- /dev/null
+++ b/project/src/main/java/com/crawler/exception/ParseException.java
@@ -0,0 +1,11 @@
+package com.crawler.exception;
+
+public class ParseException extends CrawlerException {
+ public ParseException(String message) {
+ super(message);
+ }
+
+ public ParseException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/project/src/main/java/com/crawler/model/Book.java b/project/src/main/java/com/crawler/model/Book.java
new file mode 100644
index 0000000..5ee4d7e
--- /dev/null
+++ b/project/src/main/java/com/crawler/model/Book.java
@@ -0,0 +1,105 @@
+package com.crawler.model;
+
+public class Book {
+ private String title;
+ private String author;
+ private String rating;
+ private String ratingCount;
+ private String publisher;
+ private String publishDate;
+ private String price;
+ private String isbn;
+ private String summary;
+ private String url;
+
+ public Book() {}
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ public String getRating() {
+ return rating;
+ }
+
+ public void setRating(String rating) {
+ this.rating = rating;
+ }
+
+ public String getRatingCount() {
+ return ratingCount;
+ }
+
+ public void setRatingCount(String ratingCount) {
+ this.ratingCount = ratingCount;
+ }
+
+ public String getPublisher() {
+ return publisher;
+ }
+
+ public void setPublisher(String publisher) {
+ this.publisher = publisher;
+ }
+
+ public String getPublishDate() {
+ return publishDate;
+ }
+
+ public void setPublishDate(String publishDate) {
+ this.publishDate = publishDate;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getIsbn() {
+ return isbn;
+ }
+
+ public void setIsbn(String isbn) {
+ this.isbn = isbn;
+ }
+
+ public String getSummary() {
+ return summary;
+ }
+
+ public void setSummary(String summary) {
+ this.summary = summary;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ @Override
+ public String toString() {
+ return "Book{" +
+ "title='" + title + '\'' +
+ ", author='" + author + '\'' +
+ ", rating='" + rating + '\'' +
+ '}';
+ }
+}
diff --git a/project/src/main/java/com/crawler/model/Movie.java b/project/src/main/java/com/crawler/model/Movie.java
new file mode 100644
index 0000000..6313d4c
--- /dev/null
+++ b/project/src/main/java/com/crawler/model/Movie.java
@@ -0,0 +1,96 @@
+package com.crawler.model;
+
+public class Movie {
+ private String title;
+ private String rating;
+ private String ratingCount;
+ private String year;
+ private String director;
+ private String actors;
+ private String genre;
+ private String summary;
+ private String url;
+
+ public Movie() {}
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getRating() {
+ return rating;
+ }
+
+ public void setRating(String rating) {
+ this.rating = rating;
+ }
+
+ public String getRatingCount() {
+ return ratingCount;
+ }
+
+ public void setRatingCount(String ratingCount) {
+ this.ratingCount = ratingCount;
+ }
+
+ public String getYear() {
+ return year;
+ }
+
+ public void setYear(String year) {
+ this.year = year;
+ }
+
+ public String getDirector() {
+ return director;
+ }
+
+ public void setDirector(String director) {
+ this.director = director;
+ }
+
+ public String getActors() {
+ return actors;
+ }
+
+ public void setActors(String actors) {
+ this.actors = actors;
+ }
+
+ public String getGenre() {
+ return genre;
+ }
+
+ public void setGenre(String genre) {
+ this.genre = genre;
+ }
+
+ public String getSummary() {
+ return summary;
+ }
+
+ public void setSummary(String summary) {
+ this.summary = summary;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ @Override
+ public String toString() {
+ return "Movie{" +
+ "title='" + title + '\'' +
+ ", rating='" + rating + '\'' +
+ ", year='" + year + '\'' +
+ '}';
+ }
+}
diff --git a/project/src/main/java/com/crawler/model/ScrapeBook.java b/project/src/main/java/com/crawler/model/ScrapeBook.java
new file mode 100644
index 0000000..7f4f0b1
--- /dev/null
+++ b/project/src/main/java/com/crawler/model/ScrapeBook.java
@@ -0,0 +1,69 @@
+package com.crawler.model;
+
+public class ScrapeBook {
+ private String title;
+ private String price;
+ private String rating;
+ private String availability;
+ private String imageUrl;
+ private String productUrl;
+
+ public ScrapeBook() {}
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getRating() {
+ return rating;
+ }
+
+ public void setRating(String rating) {
+ this.rating = rating;
+ }
+
+ public String getAvailability() {
+ return availability;
+ }
+
+ public void setAvailability(String availability) {
+ this.availability = availability;
+ }
+
+ public String getImageUrl() {
+ return imageUrl;
+ }
+
+ public void setImageUrl(String imageUrl) {
+ this.imageUrl = imageUrl;
+ }
+
+ public String getProductUrl() {
+ return productUrl;
+ }
+
+ public void setProductUrl(String productUrl) {
+ this.productUrl = productUrl;
+ }
+
+ @Override
+ public String toString() {
+ return "ScrapeBook{" +
+ "title='" + title + '\'' +
+ ", price='" + price + '\'' +
+ ", rating='" + rating + '\'' +
+ '}';
+ }
+}
diff --git a/project/src/main/java/com/crawler/strategy/BooksToScrapeStrategy.java b/project/src/main/java/com/crawler/strategy/BooksToScrapeStrategy.java
new file mode 100644
index 0000000..880a642
--- /dev/null
+++ b/project/src/main/java/com/crawler/strategy/BooksToScrapeStrategy.java
@@ -0,0 +1,72 @@
+package com.crawler.strategy;
+
+import com.crawler.exception.CrawlerException;
+import com.crawler.exception.NetworkException;
+import com.crawler.exception.ParseException;
+import com.crawler.model.ScrapeBook;
+import com.crawler.util.HttpUtil;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BooksToScrapeStrategy implements CrawlerStrategy {
+ private static final String URL = "http://books.toscrape.com/";
+
+ @Override
+ public List crawl() throws CrawlerException {
+ List books = new ArrayList<>();
+ try {
+ Document doc = HttpUtil.getDocument(URL);
+ Elements items = doc.select("article.product_pod");
+
+ for (Element item : items) {
+ ScrapeBook book = new ScrapeBook();
+ Element titleEl = item.selectFirst("h3 a");
+ if (titleEl != null) {
+ book.setTitle(titleEl.attr("title"));
+ book.setProductUrl(URL + titleEl.attr("href"));
+ }
+
+ Element priceEl = item.selectFirst("p.price_color");
+ if (priceEl != null) {
+ book.setPrice(priceEl.text());
+ }
+
+ Element availabilityEl = item.selectFirst("p.instock");
+ if (availabilityEl != null) {
+ book.setAvailability(availabilityEl.text().trim());
+ }
+
+ Element starRatingEl = item.selectFirst("p.star-rating");
+ if (starRatingEl != null) {
+ String classes = starRatingEl.className();
+ if (classes.contains("One")) book.setRating("1");
+ else if (classes.contains("Two")) book.setRating("2");
+ else if (classes.contains("Three")) book.setRating("3");
+ else if (classes.contains("Four")) book.setRating("4");
+ else if (classes.contains("Five")) book.setRating("5");
+ }
+
+ Element imgEl = item.selectFirst("img");
+ if (imgEl != null) {
+ book.setImageUrl(URL + imgEl.attr("src"));
+ }
+
+ books.add(book);
+ }
+ } catch (NetworkException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ParseException("Failed to parse Books to Scrape page", e);
+ }
+ return books;
+ }
+
+ @Override
+ public String getOutputFileName() {
+ return "data/books_to_scrape.json";
+ }
+}
diff --git a/project/src/main/java/com/crawler/strategy/CrawlerStrategy.java b/project/src/main/java/com/crawler/strategy/CrawlerStrategy.java
new file mode 100644
index 0000000..a9661b8
--- /dev/null
+++ b/project/src/main/java/com/crawler/strategy/CrawlerStrategy.java
@@ -0,0 +1,9 @@
+package com.crawler.strategy;
+
+import com.crawler.exception.CrawlerException;
+import java.util.List;
+
+public interface CrawlerStrategy {
+ List crawl() throws CrawlerException;
+ String getOutputFileName();
+}
diff --git a/project/src/main/java/com/crawler/strategy/DoubanBookStrategy.java b/project/src/main/java/com/crawler/strategy/DoubanBookStrategy.java
new file mode 100644
index 0000000..11490c9
--- /dev/null
+++ b/project/src/main/java/com/crawler/strategy/DoubanBookStrategy.java
@@ -0,0 +1,69 @@
+package com.crawler.strategy;
+
+import com.crawler.exception.CrawlerException;
+import com.crawler.exception.NetworkException;
+import com.crawler.exception.ParseException;
+import com.crawler.model.Book;
+import com.crawler.util.HttpUtil;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DoubanBookStrategy implements CrawlerStrategy {
+ private static final String URL = "https://book.douban.com/chart";
+
+ @Override
+ public List crawl() throws CrawlerException {
+ List books = new ArrayList<>();
+ try {
+ Document doc = HttpUtil.getDocument(URL);
+ Elements items = doc.select("li.media");
+
+ for (Element item : items) {
+ Book book = new Book();
+ Element titleEl = item.selectFirst("h2 a");
+ if (titleEl != null) {
+ book.setTitle(titleEl.text().trim());
+ book.setUrl(titleEl.attr("href"));
+ }
+
+ Element ratingEl = item.selectFirst("span.rating_nums");
+ if (ratingEl != null) {
+ book.setRating(ratingEl.text());
+ }
+
+ Element ratingCountEl = item.selectFirst("span.pl");
+ if (ratingCountEl != null) {
+ book.setRatingCount(ratingCountEl.text());
+ }
+
+ Element infoEl = item.selectFirst("div.pub");
+ if (infoEl != null) {
+ String info = infoEl.text();
+ String[] parts = info.split("/");
+ if (parts.length >= 3) {
+ book.setAuthor(parts[0].trim());
+ book.setPublisher(parts[parts.length - 3].trim());
+ book.setPublishDate(parts[parts.length - 2].trim());
+ book.setPrice(parts[parts.length - 1].trim());
+ }
+ }
+
+ books.add(book);
+ }
+ } catch (NetworkException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ParseException("Failed to parse Douban book page", e);
+ }
+ return books;
+ }
+
+ @Override
+ public String getOutputFileName() {
+ return "data/douban_books.json";
+ }
+}
diff --git a/project/src/main/java/com/crawler/strategy/DoubanMovieStrategy.java b/project/src/main/java/com/crawler/strategy/DoubanMovieStrategy.java
new file mode 100644
index 0000000..d30b05c
--- /dev/null
+++ b/project/src/main/java/com/crawler/strategy/DoubanMovieStrategy.java
@@ -0,0 +1,74 @@
+package com.crawler.strategy;
+
+import com.crawler.exception.CrawlerException;
+import com.crawler.exception.NetworkException;
+import com.crawler.exception.ParseException;
+import com.crawler.model.Movie;
+import com.crawler.util.HttpUtil;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DoubanMovieStrategy implements CrawlerStrategy {
+ private static final String URL = "https://movie.douban.com/chart";
+
+ @Override
+ public List crawl() throws CrawlerException {
+ List movies = new ArrayList<>();
+ try {
+ Document doc = HttpUtil.getDocument(URL);
+ Elements items = doc.select("tr.item");
+
+ for (Element item : items) {
+ Movie movie = new Movie();
+ Element titleEl = item.selectFirst("div.pl2 a");
+ if (titleEl != null) {
+ movie.setTitle(titleEl.text().split("/")[0].trim());
+ movie.setUrl(titleEl.attr("href"));
+ }
+
+ Element ratingEl = item.selectFirst("span.rating_nums");
+ if (ratingEl != null) {
+ movie.setRating(ratingEl.text());
+ }
+
+ Element ratingCountEl = item.selectFirst("span.pl");
+ if (ratingCountEl != null) {
+ movie.setRatingCount(ratingCountEl.text());
+ }
+
+ Element infoEl = item.selectFirst("p.pl");
+ if (infoEl != null) {
+ String info = infoEl.text();
+ movie.setYear(extractYear(info));
+ }
+
+ movies.add(movie);
+ }
+ } catch (NetworkException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ParseException("Failed to parse Douban movie page", e);
+ }
+ return movies;
+ }
+
+ private String extractYear(String info) {
+ String[] parts = info.split("/");
+ for (String part : parts) {
+ part = part.trim();
+ if (part.matches("\\d{4}.*")) {
+ return part;
+ }
+ }
+ return "";
+ }
+
+ @Override
+ public String getOutputFileName() {
+ return "data/douban_movies.json";
+ }
+}
diff --git a/project/src/main/java/com/crawler/util/FileUtil.java b/project/src/main/java/com/crawler/util/FileUtil.java
new file mode 100644
index 0000000..1981958
--- /dev/null
+++ b/project/src/main/java/com/crawler/util/FileUtil.java
@@ -0,0 +1,60 @@
+package com.crawler.util;
+
+import com.crawler.exception.FileException;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+public class FileUtil {
+ private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
+
+ public static void saveToJsonFile(List data, String filePath) throws FileException {
+ try {
+ Path path = Paths.get(filePath);
+ Path parentDir = path.getParent();
+ if (parentDir != null && !Files.exists(parentDir)) {
+ Files.createDirectories(parentDir);
+ }
+
+ try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
+ GSON.toJson(data, writer);
+ }
+ } catch (IOException e) {
+ throw new FileException("Failed to save data to file: " + filePath, e);
+ }
+ }
+
+ public static void saveToCsvFile(List data, String filePath, String[] headers, CsvRowMapper rowMapper) throws FileException {
+ try {
+ Path path = Paths.get(filePath);
+ Path parentDir = path.getParent();
+ if (parentDir != null && !Files.exists(parentDir)) {
+ Files.createDirectories(parentDir);
+ }
+
+ try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
+ writer.write(String.join(",", headers));
+ writer.newLine();
+ for (T item : data) {
+ writer.write(rowMapper.mapToCsvRow(item));
+ writer.newLine();
+ }
+ }
+ } catch (IOException e) {
+ throw new FileException("Failed to save data to CSV file: " + filePath, e);
+ }
+ }
+
+ public interface CsvRowMapper {
+ String mapToCsvRow(T item);
+ }
+}
diff --git a/project/src/main/java/com/crawler/util/HttpUtil.java b/project/src/main/java/com/crawler/util/HttpUtil.java
new file mode 100644
index 0000000..ff42d5e
--- /dev/null
+++ b/project/src/main/java/com/crawler/util/HttpUtil.java
@@ -0,0 +1,24 @@
+package com.crawler.util;
+
+import com.crawler.exception.NetworkException;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+
+import java.io.IOException;
+
+public class HttpUtil {
+ private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
+ private static final int TIMEOUT = 10000;
+
+ public static Document getDocument(String url) throws NetworkException {
+ try {
+ return Jsoup.connect(url)
+ .userAgent(USER_AGENT)
+ .timeout(TIMEOUT)
+ .ignoreHttpErrors(true)
+ .get();
+ } catch (IOException e) {
+ throw new NetworkException("Failed to fetch URL: " + url, e);
+ }
+ }
+}
diff --git a/project/src/main/java/com/crawler/view/ConsoleView.java b/project/src/main/java/com/crawler/view/ConsoleView.java
new file mode 100644
index 0000000..e836f20
--- /dev/null
+++ b/project/src/main/java/com/crawler/view/ConsoleView.java
@@ -0,0 +1,59 @@
+package com.crawler.view;
+
+import java.util.List;
+
+public class ConsoleView {
+ public void displayWelcome() {
+ System.out.println("========================================");
+ System.out.println(" Web Crawler Application");
+ System.out.println("========================================");
+ System.out.println();
+ }
+
+ public void displayMenu() {
+ System.out.println("Please select an option:");
+ System.out.println("1. Crawl Douban Movies");
+ System.out.println("2. Crawl Douban Books");
+ System.out.println("3. Crawl Books to Scrape");
+ System.out.println("4. Crawl All");
+ System.out.println("0. Exit");
+ System.out.println();
+ System.out.print("Enter your choice: ");
+ }
+
+ public void displayCrawling(String description) {
+ System.out.println();
+ System.out.println("----------------------------------------");
+ System.out.println("Crawling: " + description);
+ System.out.println("----------------------------------------");
+ }
+
+ public void displaySuccess(String fileName) {
+ System.out.println("✓ Data saved to: " + fileName);
+ System.out.println();
+ }
+
+ public void displayError(String message) {
+ System.err.println("✗ Error: " + message);
+ System.err.println();
+ }
+
+ public void displayResults(List> data) {
+ System.out.println("Found " + data.size() + " items:");
+ for (Object item : data) {
+ System.out.println("- " + item);
+ }
+ System.out.println();
+ }
+
+ public void displayGoodbye() {
+ System.out.println("========================================");
+ System.out.println(" Goodbye!");
+ System.out.println("========================================");
+ }
+
+ public void displayInvalidChoice() {
+ System.out.println("Invalid choice. Please try again.");
+ System.out.println();
+ }
+}
diff --git a/project/src/main/java/command/ClearCommand.java b/project/src/main/java/command/ClearCommand.java
new file mode 100644
index 0000000..f172624
--- /dev/null
+++ b/project/src/main/java/command/ClearCommand.java
@@ -0,0 +1,38 @@
+package command;
+
+import controller.CrawlerController;
+import exception.CrawlerResult;
+import java.util.Collections;
+import java.util.List;
+
+public class ClearCommand implements Command {
+ private final CrawlerController controller;
+
+ public ClearCommand(CrawlerController controller) {
+ this.controller = controller;
+ }
+
+ @Override
+ public String getName() {
+ return "clear";
+ }
+
+ @Override
+ public String getDescription() {
+ return "清空所有数据";
+ }
+
+ @Override
+ public CrawlerResult execute() {
+ controller.clearAllData();
+ return CrawlerResult.success("SYSTEM")
+ .message("数据已清空")
+ .dataCount(0)
+ .build();
+ }
+
+ @Override
+ public List getRequiredSources() {
+ return Collections.emptyList();
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/command/Command.java b/project/src/main/java/command/Command.java
new file mode 100644
index 0000000..c86404f
--- /dev/null
+++ b/project/src/main/java/command/Command.java
@@ -0,0 +1,11 @@
+package command;
+
+import exception.CrawlerResult;
+import java.util.List;
+
+public interface Command {
+ String getName();
+ String getDescription();
+ CrawlerResult execute();
+ List getRequiredSources();
+}
\ No newline at end of file
diff --git a/project/src/main/java/command/CommandRegistry.java b/project/src/main/java/command/CommandRegistry.java
new file mode 100644
index 0000000..3e963a0
--- /dev/null
+++ b/project/src/main/java/command/CommandRegistry.java
@@ -0,0 +1,41 @@
+package command;
+
+import exception.CrawlerResult;
+import exception.ValidationException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CommandRegistry {
+ private final Map commands;
+
+ public CommandRegistry() {
+ this.commands = new HashMap<>();
+ }
+
+ public void register(Command command) {
+ commands.put(command.getName(), command);
+ }
+
+ public Command getCommand(String name) {
+ Command command = commands.get(name);
+ if (command == null) {
+ throw new ValidationException("未知命令: " + name);
+ }
+ return command;
+ }
+
+ public List getAllCommands() {
+ return new ArrayList<>(commands.values());
+ }
+
+ public String getHelpText() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("可用命令:\n");
+ for (Command cmd : commands.values()) {
+ sb.append(String.format(" %-15s - %s\n", cmd.getName(), cmd.getDescription()));
+ }
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/command/ListCrawlersCommand.java b/project/src/main/java/command/ListCrawlersCommand.java
new file mode 100644
index 0000000..50d6a0b
--- /dev/null
+++ b/project/src/main/java/command/ListCrawlersCommand.java
@@ -0,0 +1,37 @@
+package command;
+
+import controller.CrawlerController;
+import exception.CrawlerResult;
+import java.util.List;
+
+public class ListCrawlersCommand implements Command {
+ private final CrawlerController controller;
+
+ public ListCrawlersCommand(CrawlerController controller) {
+ this.controller = controller;
+ }
+
+ @Override
+ public String getName() {
+ return "list";
+ }
+
+ @Override
+ public String getDescription() {
+ return "列出所有可用爬虫";
+ }
+
+ @Override
+ public CrawlerResult execute() {
+ List crawlers = controller.getAllCrawlerNames();
+ return CrawlerResult.success("SYSTEM")
+ .message("获取爬虫列表成功")
+ .dataCount(crawlers.size())
+ .build();
+ }
+
+ @Override
+ public List getRequiredSources() {
+ return controller.getAllCrawlerNames();
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/command/RunAllCommand.java b/project/src/main/java/command/RunAllCommand.java
new file mode 100644
index 0000000..a2842ea
--- /dev/null
+++ b/project/src/main/java/command/RunAllCommand.java
@@ -0,0 +1,59 @@
+package command;
+
+import controller.CrawlerController;
+import exception.CrawlerResult;
+import java.util.List;
+
+public class RunAllCommand implements Command {
+ private final CrawlerController controller;
+
+ public RunAllCommand(CrawlerController controller) {
+ this.controller = controller;
+ }
+
+ @Override
+ public String getName() {
+ return "run-all";
+ }
+
+ @Override
+ public String getDescription() {
+ return "运行所有爬虫";
+ }
+
+ @Override
+ public CrawlerResult execute() {
+ long startTime = System.currentTimeMillis();
+ List results = controller.runAllCrawlers();
+ long elapsedTime = System.currentTimeMillis() - startTime;
+
+ int successCount = 0;
+ int totalCount = results.size();
+ int totalData = 0;
+
+ for (CrawlerResult result : results) {
+ if (result.isSuccess()) {
+ successCount++;
+ totalData += result.getDataCount();
+ }
+ }
+
+ if (successCount == totalCount) {
+ return CrawlerResult.success("ALL")
+ .message("所有爬虫执行成功")
+ .dataCount(totalData)
+ .elapsedTime(elapsedTime)
+ .build();
+ } else {
+ return CrawlerResult.failure("ALL", "PARTIAL_FAIL",
+ String.format("执行完成: %d/%d 成功, 获取 %d 条数据", successCount, totalCount, totalData))
+ .elapsedTime(elapsedTime)
+ .build();
+ }
+ }
+
+ @Override
+ public List getRequiredSources() {
+ return controller.getAllCrawlerNames();
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/command/RunSingleCommand.java b/project/src/main/java/command/RunSingleCommand.java
new file mode 100644
index 0000000..dcdb45b
--- /dev/null
+++ b/project/src/main/java/command/RunSingleCommand.java
@@ -0,0 +1,37 @@
+package command;
+
+import controller.CrawlerController;
+import exception.CrawlerResult;
+import exception.ValidationException;
+import java.util.Collections;
+import java.util.List;
+
+public class RunSingleCommand implements Command {
+ private final CrawlerController controller;
+ private final String crawlerName;
+
+ public RunSingleCommand(CrawlerController controller, String crawlerName) {
+ this.controller = controller;
+ this.crawlerName = crawlerName;
+ }
+
+ @Override
+ public String getName() {
+ return "run";
+ }
+
+ @Override
+ public String getDescription() {
+ return "运行指定爬虫: " + crawlerName;
+ }
+
+ @Override
+ public CrawlerResult execute() {
+ return controller.runCrawler(crawlerName);
+ }
+
+ @Override
+ public List getRequiredSources() {
+ return Collections.singletonList(crawlerName);
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/command/StatsCommand.java b/project/src/main/java/command/StatsCommand.java
new file mode 100644
index 0000000..d0ec936
--- /dev/null
+++ b/project/src/main/java/command/StatsCommand.java
@@ -0,0 +1,38 @@
+package command;
+
+import controller.CrawlerController;
+import exception.CrawlerResult;
+import java.util.Collections;
+import java.util.List;
+
+public class StatsCommand implements Command {
+ private final CrawlerController controller;
+
+ public StatsCommand(CrawlerController controller) {
+ this.controller = controller;
+ }
+
+ @Override
+ public String getName() {
+ return "stats";
+ }
+
+ @Override
+ public String getDescription() {
+ return "显示统计信息";
+ }
+
+ @Override
+ public CrawlerResult execute() {
+ String stats = controller.getStats();
+ return CrawlerResult.success("STATS")
+ .message(stats)
+ .dataCount(0)
+ .build();
+ }
+
+ @Override
+ public List getRequiredSources() {
+ return Collections.emptyList();
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/config/CrawlerConfig.java b/project/src/main/java/config/CrawlerConfig.java
new file mode 100644
index 0000000..6d46a55
--- /dev/null
+++ b/project/src/main/java/config/CrawlerConfig.java
@@ -0,0 +1,73 @@
+package config;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * 爬虫配置类
+ */
+public class CrawlerConfig {
+ private static final String CONFIG_FILE = "crawler.properties";
+ private static Properties props = new Properties();
+
+ // 默认配置
+ static {
+ props.setProperty("delay.ms", "1000");
+ props.setProperty("timeout.ms", "15000");
+ props.setProperty("user.agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
+ props.setProperty("db.path", "crawler.db");
+ props.setProperty("output.dir", "output");
+ props.setProperty("enable.database", "true");
+ props.setProperty("enable.file", "true");
+ }
+
+ /**
+ * 加载配置文件
+ */
+ public static void load() {
+ try (InputStream is = new FileInputStream(CONFIG_FILE)) {
+ props.load(is);
+ System.out.println("配置文件加载成功: " + CONFIG_FILE);
+ } catch (IOException e) {
+ System.out.println("使用默认配置(未找到配置文件: " + CONFIG_FILE + ")");
+ }
+ }
+
+ public static int getDelayMs() {
+ return Integer.parseInt(props.getProperty("delay.ms", "1000"));
+ }
+
+ public static int getTimeoutMs() {
+ return Integer.parseInt(props.getProperty("timeout.ms", "15000"));
+ }
+
+ public static String getUserAgent() {
+ return props.getProperty("user.agent");
+ }
+
+ public static String getDbPath() {
+ return props.getProperty("db.path", "crawler.db");
+ }
+
+ public static String getOutputDir() {
+ return props.getProperty("output.dir", "output");
+ }
+
+ public static boolean isDatabaseEnabled() {
+ return Boolean.parseBoolean(props.getProperty("enable.database", "true"));
+ }
+
+ public static boolean isFileOutputEnabled() {
+ return Boolean.parseBoolean(props.getProperty("enable.file", "true"));
+ }
+
+ public static String getProperty(String key) {
+ return props.getProperty(key);
+ }
+
+ public static String getProperty(String key, String defaultValue) {
+ return props.getProperty(key, defaultValue);
+ }
+}
diff --git a/project/src/main/java/controller/CrawlerController.java b/project/src/main/java/controller/CrawlerController.java
new file mode 100644
index 0000000..1d55611
--- /dev/null
+++ b/project/src/main/java/controller/CrawlerController.java
@@ -0,0 +1,177 @@
+package controller;
+
+import exception.CrawlerResult;
+import exception.ValidationException;
+import model.Movie;
+import storage.DataStorage;
+import storage.FileStorage;
+import storage.StorageStats;
+import strategy.CrawlerStrategy;
+import strategy.BookCrawlerStrategy;
+import strategy.impl.DoubanStrategy;
+import strategy.impl.MaoyanStrategy;
+import strategy.impl.RottenTomatoesStrategy;
+import strategy.impl.DoubanBookStrategy;
+import strategy.impl.BooksToScrapeStrategy;
+import util.Logger;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CrawlerController {
+ private Map movieCrawlers;
+ private Map bookCrawlers;
+ private DataStorage storage;
+ private String outputDir;
+
+ public CrawlerController() {
+ this.movieCrawlers = new HashMap<>();
+ this.bookCrawlers = new HashMap<>();
+ this.outputDir = "output";
+ initStorage();
+ registerDefaultCrawlers();
+ }
+
+ public CrawlerController(String outputDir) {
+ this.movieCrawlers = new HashMap<>();
+ this.bookCrawlers = new HashMap<>();
+ this.outputDir = outputDir;
+ initStorage();
+ registerDefaultCrawlers();
+ }
+
+ private void initStorage() {
+ this.storage = new FileStorage(outputDir);
+ Logger.info("文件存储初始化完成,输出目录: " + outputDir);
+ }
+
+ private void registerDefaultCrawlers() {
+ registerMovieCrawler(new DoubanStrategy());
+ registerMovieCrawler(new MaoyanStrategy());
+ registerMovieCrawler(new RottenTomatoesStrategy());
+ registerBookCrawler(new DoubanBookStrategy());
+ registerBookCrawler(new BooksToScrapeStrategy());
+ }
+
+ public void registerMovieCrawler(CrawlerStrategy strategy) {
+ strategy.setStorage(storage);
+ movieCrawlers.put(strategy.getName(), strategy);
+ Logger.info("已注册电影爬虫: " + strategy.getName());
+ }
+
+ public void registerBookCrawler(BookCrawlerStrategy strategy) {
+ strategy.setStorage(storage);
+ bookCrawlers.put(strategy.getName(), strategy);
+ Logger.info("已注册图书爬虫: " + strategy.getName());
+ }
+
+ public void registerCrawler(CrawlerStrategy strategy) {
+ registerMovieCrawler(strategy);
+ }
+
+ public void registerCrawler(CrawlerStrategy strategy, DataStorage customStorage) {
+ strategy.setStorage(customStorage);
+ movieCrawlers.put(strategy.getName(), strategy);
+ Logger.info("已注册爬虫: " + strategy.getName());
+ }
+
+ public List getAllCrawlerNames() {
+ List names = new ArrayList<>();
+ names.addAll(movieCrawlers.keySet());
+ names.addAll(bookCrawlers.keySet());
+ return names;
+ }
+
+ public List getMovieCrawlerNames() {
+ return new ArrayList<>(movieCrawlers.keySet());
+ }
+
+ public List getBookCrawlerNames() {
+ return new ArrayList<>(bookCrawlers.keySet());
+ }
+
+ public CrawlerResult runCrawler(String name) {
+ if (movieCrawlers.containsKey(name)) {
+ CrawlerStrategy strategy = movieCrawlers.get(name);
+ Logger.info("开始执行电影爬虫: " + name);
+ CrawlerResult result = strategy.execute();
+ Logger.info("爬虫执行完成: " + result);
+ return result;
+ } else if (bookCrawlers.containsKey(name)) {
+ BookCrawlerStrategy strategy = bookCrawlers.get(name);
+ Logger.info("开始执行图书爬虫: " + name);
+ CrawlerResult result = strategy.execute();
+ Logger.info("爬虫执行完成: " + result);
+ return result;
+ } else {
+ throw new ValidationException("未找到爬虫: " + name);
+ }
+ }
+
+ public List runAllCrawlers() {
+ List results = new ArrayList<>();
+ int total = movieCrawlers.size() + bookCrawlers.size();
+ Logger.info("开始执行所有爬虫,共 " + total + " 个");
+
+ for (CrawlerStrategy strategy : movieCrawlers.values()) {
+ try {
+ CrawlerResult result = strategy.execute();
+ results.add(result);
+ } catch (Exception e) {
+ Logger.error("爬虫执行失败: " + strategy.getName(), e);
+ results.add(CrawlerResult.failure(strategy.getName(), "EXEC_ERROR", e.getMessage()).build());
+ }
+ }
+
+ for (BookCrawlerStrategy strategy : bookCrawlers.values()) {
+ try {
+ CrawlerResult result = strategy.execute();
+ results.add(result);
+ } catch (Exception e) {
+ Logger.error("爬虫执行失败: " + strategy.getName(), e);
+ results.add(CrawlerResult.failure(strategy.getName(), "EXEC_ERROR", e.getMessage()).build());
+ }
+ }
+
+ return results;
+ }
+
+ public String getStats() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("========== 爬虫统计 ==========\n");
+ sb.append("电影爬虫数量: ").append(movieCrawlers.size()).append("\n");
+ sb.append("图书爬虫数量: ").append(bookCrawlers.size()).append("\n");
+ sb.append("总爬虫数量: ").append(movieCrawlers.size() + bookCrawlers.size()).append("\n");
+ sb.append("\n电影爬虫列表:\n");
+ for (String name : movieCrawlers.keySet()) {
+ sb.append(" - ").append(name).append("\n");
+ }
+ sb.append("\n图书爬虫列表:\n");
+ for (String name : bookCrawlers.keySet()) {
+ sb.append(" - ").append(name).append("\n");
+ }
+ sb.append("=============================");
+ return sb.toString();
+ }
+
+ public void clearAllData() {
+ if (storage != null) {
+ storage.clearAll();
+ Logger.info("所有数据已清空");
+ }
+ }
+
+ public DataStorage getStorage() {
+ return storage;
+ }
+
+ public Map getCrawlers() {
+ return movieCrawlers;
+ }
+
+ public Map getBookCrawlers() {
+ return bookCrawlers;
+ }
+}
diff --git a/project/src/main/java/crawler/BaseCrawler.java b/project/src/main/java/crawler/BaseCrawler.java
new file mode 100644
index 0000000..c9c1c03
--- /dev/null
+++ b/project/src/main/java/crawler/BaseCrawler.java
@@ -0,0 +1,139 @@
+package crawler;
+
+import model.Movie;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import storage.DataStorage;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 爬虫抽象基类
+ */
+public abstract class BaseCrawler {
+ protected String name; // 爬虫名称
+ protected String baseUrl; // 基础URL
+ protected int delayMs; // 请求延迟(毫秒)
+ protected DataStorage storage; // 数据存储
+
+ public BaseCrawler(String name, String baseUrl) {
+ this(name, baseUrl, 1000);
+ }
+
+ public BaseCrawler(String name, String baseUrl, int delayMs) {
+ this.name = name;
+ this.baseUrl = baseUrl;
+ this.delayMs = delayMs;
+ }
+
+ /**
+ * 设置数据存储
+ */
+ public void setStorage(DataStorage storage) {
+ this.storage = storage;
+ }
+
+ /**
+ * 获取爬虫名称
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * 获取网页文档
+ */
+ protected Document fetchDocument(String url) throws IOException {
+ return Jsoup.connect(url)
+ .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
+ "(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
+ .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
+ .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
+ .timeout(15000)
+ .get();
+ }
+
+ /**
+ * 延迟等待
+ */
+ protected void delay() {
+ try {
+ Thread.sleep(delayMs);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ /**
+ * 开始爬取(模板方法模式)
+ */
+ public final void crawl() {
+ System.out.println("========================================");
+ System.out.println("开始爬取: " + name);
+ System.out.println("目标URL: " + baseUrl);
+ System.out.println("========================================");
+
+ long startTime = System.currentTimeMillis();
+ List allMovies = new ArrayList<>();
+
+ try {
+ // 获取所有需要爬取的URL列表
+ List urls = getUrls();
+ System.out.println("共 " + urls.size() + " 个页面需要爬取");
+
+ for (int i = 0; i < urls.size(); i++) {
+ String url = urls.get(i);
+ System.out.println("\n正在爬取第 " + (i + 1) + "/" + urls.size() + " 页: " + url);
+
+ try {
+ Document doc = fetchDocument(url);
+ List movies = parsePage(doc);
+
+ // 设置数据来源
+ for (Movie movie : movies) {
+ movie.setSource(name);
+ }
+
+ allMovies.addAll(movies);
+ System.out.println("本页获取 " + movies.size() + " 条数据");
+
+ // 延迟,避免被封
+ if (i < urls.size() - 1) {
+ delay();
+ }
+
+ } catch (IOException e) {
+ System.err.println("爬取页面失败: " + url + " - " + e.getMessage());
+ }
+ }
+
+ // 保存数据
+ if (!allMovies.isEmpty() && storage != null) {
+ storage.saveBatch(allMovies);
+ }
+
+ long endTime = System.currentTimeMillis();
+ System.out.println("\n========================================");
+ System.out.println("爬取完成!");
+ System.out.println("总数据量: " + allMovies.size());
+ System.out.println("耗时: " + (endTime - startTime) / 1000 + " 秒");
+ System.out.println("========================================");
+
+ } catch (Exception e) {
+ System.err.println("爬取过程出错: " + e.getMessage());
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 获取所有需要爬取的URL列表(子类实现)
+ */
+ protected abstract List getUrls();
+
+ /**
+ * 解析单个页面(子类实现)
+ */
+ protected abstract List parsePage(Document doc);
+}
diff --git a/project/src/main/java/crawler/DoubanCrawler.java b/project/src/main/java/crawler/DoubanCrawler.java
new file mode 100644
index 0000000..df526c8
--- /dev/null
+++ b/project/src/main/java/crawler/DoubanCrawler.java
@@ -0,0 +1,113 @@
+package crawler;
+
+import model.Movie;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 豆瓣电影Top250爬虫
+ */
+public class DoubanCrawler extends BaseCrawler {
+
+ public DoubanCrawler() {
+ super("豆瓣电影Top250", "https://movie.douban.com/top250", 1500);
+ }
+
+ @Override
+ protected List getUrls() {
+ List urls = new ArrayList<>();
+ // 豆瓣Top250共10页,每页25部
+ for (int i = 0; i < 10; i++) {
+ urls.add(baseUrl + "?start=" + (i * 25));
+ }
+ return urls;
+ }
+
+ @Override
+ protected List parsePage(Document doc) {
+ List movies = new ArrayList<>();
+ Elements items = doc.select("div.item");
+
+ for (Element item : items) {
+ try {
+ Movie movie = new Movie();
+
+ // 排名
+ String rankStr = item.select("em").text();
+ movie.setRank(Integer.parseInt(rankStr));
+
+ // 电影名称(取第一个标题)
+ Element titleElement = item.select("span.title").first();
+ if (titleElement != null) {
+ movie.setName(titleElement.text());
+ }
+
+ // 评分
+ String ratingStr = item.select("span.rating_num").text();
+ if (!ratingStr.isEmpty()) {
+ movie.setRating(Double.parseDouble(ratingStr));
+ }
+
+ // 评分人数
+ String ratingCountStr = item.select("div.star span").last().text();
+ if (ratingCountStr != null && ratingCountStr.contains("人评价")) {
+ String num = ratingCountStr.replace("人评价", "").trim();
+ movie.setRatingCount(parseNumber(num));
+ }
+
+ // 其他信息(导演、年份等)
+ String info = item.select("div.bd p").first().text();
+ if (info != null) {
+ // 提取年份
+ String[] parts = info.split(" / ");
+ if (parts.length > 0) {
+ String firstPart = parts[0];
+ if (firstPart.contains("导演: ")) {
+ movie.setDirector(firstPart.replace("导演: ", "").trim());
+ }
+ // 提取年份(通常是最后一个数字部分)
+ for (String part : parts) {
+ if (part.matches("\\d{4}") || part.matches("\\d{4}.*")) {
+ movie.setYear(part.trim().split("\\s+")[0]);
+ break;
+ }
+ }
+ }
+ }
+
+ // 详情链接
+ String link = item.select("div.hd a").attr("href");
+ movie.setUrl(link);
+
+ // 海报图片
+ String imgUrl = item.select("div.pic img").attr("src");
+ movie.setImageUrl(imgUrl);
+
+ movies.add(movie);
+
+ } catch (Exception e) {
+ System.err.println("解析电影数据出错: " + e.getMessage());
+ }
+ }
+
+ return movies;
+ }
+
+ /**
+ * 解析数字(处理中文数字如"万")
+ */
+ private Integer parseNumber(String str) {
+ try {
+ if (str.contains("万")) {
+ return (int) (Double.parseDouble(str.replace("万", "")) * 10000);
+ }
+ return Integer.parseInt(str.replace(",", ""));
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+}
diff --git a/project/src/main/java/crawler/ImdbCrawler.java b/project/src/main/java/crawler/ImdbCrawler.java
new file mode 100644
index 0000000..17dffeb
--- /dev/null
+++ b/project/src/main/java/crawler/ImdbCrawler.java
@@ -0,0 +1,100 @@
+package crawler;
+
+import model.Movie;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * IMDB Top250 爬虫示例
+ */
+public class ImdbCrawler extends BaseCrawler {
+
+ public ImdbCrawler() {
+ super("IMDB电影Top250", "https://www.imdb.com/chart/top/", 2000);
+ }
+
+ @Override
+ protected List getUrls() {
+ List urls = new ArrayList<>();
+ urls.add(baseUrl);
+ return urls;
+ }
+
+ @Override
+ protected List parsePage(Document doc) {
+ List movies = new ArrayList<>();
+ Elements items = doc.select("li.ipc-metadata-list-summary-item");
+
+ int rank = 1;
+ for (Element item : items) {
+ try {
+ Movie movie = new Movie();
+ movie.setRank(rank++);
+
+ // 电影名称
+ Element titleElement = item.select("h3.ipc-title__text").first();
+ if (titleElement != null) {
+ String fullTitle = titleElement.text();
+ // 移除排名前缀如 "1. "
+ if (fullTitle.matches("\\d+\\..*")) {
+ fullTitle = fullTitle.substring(fullTitle.indexOf(".") + 1).trim();
+ }
+ movie.setName(fullTitle);
+ }
+
+ // 评分
+ String ratingStr = item.select("span.ipc-rating-star--rating").text();
+ if (!ratingStr.isEmpty()) {
+ movie.setRating(Double.parseDouble(ratingStr));
+ }
+
+ // 评分人数
+ String countStr = item.select("span.ipc-rating-star--voteCount").text();
+ if (!countStr.isEmpty()) {
+ movie.setRatingCount(parseNumber(countStr.replaceAll("[()\\s]", "")));
+ }
+
+ // 年份
+ String yearStr = item.select("span.cli-title-metadata-item").first().text();
+ if (yearStr != null && yearStr.matches("\\d{4}")) {
+ movie.setYear(yearStr);
+ }
+
+ // 详情链接
+ String link = item.select("a.ipc-title-link-wrapper").attr("href");
+ if (!link.isEmpty()) {
+ movie.setUrl("https://www.imdb.com" + link);
+ }
+
+ // 海报图片
+ String imgUrl = item.select("img.ipc-image").attr("src");
+ movie.setImageUrl(imgUrl);
+
+ movies.add(movie);
+
+ } catch (Exception e) {
+ System.err.println("解析电影数据出错: " + e.getMessage());
+ }
+ }
+
+ return movies;
+ }
+
+ private Integer parseNumber(String str) {
+ try {
+ if (str.contains("M")) {
+ return (int) (Double.parseDouble(str.replace("M", "")) * 1000000);
+ }
+ if (str.contains("K")) {
+ return (int) (Double.parseDouble(str.replace("K", "")) * 1000);
+ }
+ return Integer.parseInt(str.replace(",", ""));
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+}
diff --git a/project/src/main/java/crawler/MaoyanCrawler.java b/project/src/main/java/crawler/MaoyanCrawler.java
new file mode 100644
index 0000000..90d7cc3
--- /dev/null
+++ b/project/src/main/java/crawler/MaoyanCrawler.java
@@ -0,0 +1,92 @@
+package crawler;
+
+import model.Movie;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 猫眼电影 Top100 爬虫
+ */
+public class MaoyanCrawler extends BaseCrawler {
+
+ public MaoyanCrawler() {
+ super("猫眼电影Top100", "https://maoyan.com/board/4", 1500);
+ }
+
+ @Override
+ protected List getUrls() {
+ List urls = new ArrayList<>();
+ // 猫眼Top100共10页,每页10部
+ for (int i = 0; i < 10; i++) {
+ urls.add(baseUrl + "?offset=" + (i * 10));
+ }
+ return urls;
+ }
+
+ @Override
+ protected List parsePage(Document doc) {
+ List movies = new ArrayList<>();
+ Elements items = doc.select("dl.board-wrapper dd");
+
+ for (Element item : items) {
+ try {
+ Movie movie = new Movie();
+
+ // 排名
+ String rankStr = item.select("i.board-index").text();
+ movie.setRank(Integer.parseInt(rankStr));
+
+ // 电影名称
+ String name = item.select("p.name a").text();
+ movie.setName(name);
+
+ // 评分
+ String ratingStr = item.select("i.integer").text() +
+ item.select("i.fraction").text();
+ if (!ratingStr.isEmpty()) {
+ movie.setRating(Double.parseDouble(ratingStr));
+ }
+
+ // 主演
+ String actors = item.select("p.star").text();
+ if (actors != null && actors.contains("主演:")) {
+ movie.setActors(actors.replace("主演:", "").trim());
+ }
+
+ // 上映时间
+ String releaseTime = item.select("p.releasetime").text();
+ if (releaseTime != null && releaseTime.contains("上映时间:")) {
+ String timeStr = releaseTime.replace("上映时间:", "").trim();
+ // 提取年份
+ if (timeStr.matches("\\d{4}.*")) {
+ movie.setYear(timeStr.substring(0, 4));
+ }
+ }
+
+ // 详情链接
+ String link = item.select("p.name a").attr("href");
+ if (!link.isEmpty()) {
+ movie.setUrl("https://maoyan.com" + link);
+ }
+
+ // 海报图片
+ String imgUrl = item.select("img.board-img").attr("data-src");
+ if (imgUrl.isEmpty()) {
+ imgUrl = item.select("img.board-img").attr("src");
+ }
+ movie.setImageUrl(imgUrl);
+
+ movies.add(movie);
+
+ } catch (Exception e) {
+ System.err.println("解析猫眼电影数据出错: " + e.getMessage());
+ }
+ }
+
+ return movies;
+ }
+}
diff --git a/project/src/main/java/crawler/RottenTomatoesCrawler.java b/project/src/main/java/crawler/RottenTomatoesCrawler.java
new file mode 100644
index 0000000..f443186
--- /dev/null
+++ b/project/src/main/java/crawler/RottenTomatoesCrawler.java
@@ -0,0 +1,102 @@
+package crawler;
+
+import model.Movie;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 烂番茄 (Rotten Tomatoes) Top100 爬虫
+ */
+public class RottenTomatoesCrawler extends BaseCrawler {
+
+ public RottenTomatoesCrawler() {
+ super("烂番茄Top100", "https://www.rottentomatoes.com/top/bestofrt/", 2000);
+ }
+
+ @Override
+ protected List getUrls() {
+ List urls = new ArrayList<>();
+ urls.add(baseUrl);
+ return urls;
+ }
+
+ @Override
+ protected List parsePage(Document doc) {
+ List movies = new ArrayList<>();
+ Elements items = doc.select("table.table tr");
+
+ // 跳过表头
+ int rank = 0;
+ for (Element item : items) {
+ try {
+ // 跳过表头行
+ Element rankElement = item.selectFirst("td.rank");
+ if (rankElement == null) continue;
+
+ Movie movie = new Movie();
+
+ // 排名
+ String rankStr = rankElement.text();
+ if (!rankStr.isEmpty()) {
+ movie.setRank(Integer.parseInt(rankStr));
+ } else {
+ movie.setRank(++rank);
+ }
+
+ // 电影名称和年份
+ Element titleElement = item.selectFirst("td.title a");
+ if (titleElement != null) {
+ String fullTitle = titleElement.text();
+ // 提取年份(通常在括号里)
+ if (fullTitle.contains("(") && fullTitle.contains(")")) {
+ int start = fullTitle.lastIndexOf("(");
+ int end = fullTitle.lastIndexOf(")");
+ if (start > 0 && end > start) {
+ String yearStr = fullTitle.substring(start + 1, end);
+ if (yearStr.matches("\\d{4}")) {
+ movie.setYear(yearStr);
+ }
+ movie.setName(fullTitle.substring(0, start).trim());
+ } else {
+ movie.setName(fullTitle);
+ }
+ } else {
+ movie.setName(fullTitle);
+ }
+
+ // 详情链接
+ String link = titleElement.attr("href");
+ if (!link.isEmpty()) {
+ if (link.startsWith("/")) {
+ movie.setUrl("https://www.rottentomatoes.com" + link);
+ } else {
+ movie.setUrl(link);
+ }
+ }
+ }
+
+ // 新鲜度评分(烂番茄特有)
+ Element scoreElement = item.selectFirst("td.score span.tMeterScore");
+ if (scoreElement != null) {
+ String scoreStr = scoreElement.text();
+ if (scoreStr.matches("\\d+%")) {
+ // 转换为10分制
+ double rating = Double.parseDouble(scoreStr.replace("%", "")) / 10;
+ movie.setRating(Math.round(rating * 10) / 10.0);
+ }
+ }
+
+ movies.add(movie);
+
+ } catch (Exception e) {
+ System.err.println("解析烂番茄数据出错: " + e.getMessage());
+ }
+ }
+
+ return movies;
+ }
+}
diff --git a/project/src/main/java/exception/CrawlerException.java b/project/src/main/java/exception/CrawlerException.java
new file mode 100644
index 0000000..fd4822f
--- /dev/null
+++ b/project/src/main/java/exception/CrawlerException.java
@@ -0,0 +1,55 @@
+package exception;
+
+public class CrawlerException extends RuntimeException {
+ private final String source;
+ private final String errorCode;
+
+ public CrawlerException(String message) {
+ super(message);
+ this.source = "UNKNOWN";
+ this.errorCode = "CRAWLER_001";
+ }
+
+ public CrawlerException(String message, String source) {
+ super(message);
+ this.source = source;
+ this.errorCode = "CRAWLER_001";
+ }
+
+ public CrawlerException(String message, Throwable cause) {
+ super(message, cause);
+ this.source = "UNKNOWN";
+ this.errorCode = "CRAWLER_002";
+ }
+
+ public CrawlerException(String message, String source, Throwable cause) {
+ super(message, cause);
+ this.source = source;
+ this.errorCode = "CRAWLER_002";
+ }
+
+ public CrawlerException(String message, String source, String errorCode) {
+ super(message);
+ this.source = source;
+ this.errorCode = errorCode;
+ }
+
+ public CrawlerException(String message, String source, String errorCode, Throwable cause) {
+ super(message, cause);
+ this.source = source;
+ this.errorCode = errorCode;
+ }
+
+ public String getSource() {
+ return source;
+ }
+
+ public String getErrorCode() {
+ return errorCode;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("[%s] [%s] %s (source: %s)", errorCode, getClass().getSimpleName(), getMessage(), source);
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/exception/CrawlerResult.java b/project/src/main/java/exception/CrawlerResult.java
new file mode 100644
index 0000000..a066ced
--- /dev/null
+++ b/project/src/main/java/exception/CrawlerResult.java
@@ -0,0 +1,103 @@
+package exception;
+
+public class CrawlerResult {
+ private final boolean success;
+ private final String source;
+ private final String message;
+ private final int dataCount;
+ private final long elapsedTime;
+ private final String errorCode;
+
+ private CrawlerResult(Builder builder) {
+ this.success = builder.success;
+ this.source = builder.source;
+ this.message = builder.message;
+ this.dataCount = builder.dataCount;
+ this.elapsedTime = builder.elapsedTime;
+ this.errorCode = builder.errorCode;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public String getSource() {
+ return source;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public int getDataCount() {
+ return dataCount;
+ }
+
+ public long getElapsedTime() {
+ return elapsedTime;
+ }
+
+ public String getErrorCode() {
+ return errorCode;
+ }
+
+ public static Builder success(String source) {
+ return new Builder().success(true).source(source);
+ }
+
+ public static Builder failure(String source, String errorCode, String message) {
+ return new Builder().success(false).source(source).errorCode(errorCode).message(message);
+ }
+
+ public static class Builder {
+ private boolean success;
+ private String source;
+ private String message;
+ private int dataCount;
+ private long elapsedTime;
+ private String errorCode;
+
+ public Builder success(boolean success) {
+ this.success = success;
+ return this;
+ }
+
+ public Builder source(String source) {
+ this.source = source;
+ return this;
+ }
+
+ public Builder message(String message) {
+ this.message = message;
+ return this;
+ }
+
+ public Builder dataCount(int dataCount) {
+ this.dataCount = dataCount;
+ return this;
+ }
+
+ public Builder elapsedTime(long elapsedTime) {
+ this.elapsedTime = elapsedTime;
+ return this;
+ }
+
+ public Builder errorCode(String errorCode) {
+ this.errorCode = errorCode;
+ return this;
+ }
+
+ public CrawlerResult build() {
+ return new CrawlerResult(this);
+ }
+ }
+
+ @Override
+ public String toString() {
+ if (success) {
+ return String.format("[SUCCESS] %s - 获取 %d 条数据 (耗时: %dms)", source, dataCount, elapsedTime);
+ } else {
+ return String.format("[FAILURE] [%s] %s - %s", errorCode, source, message);
+ }
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/exception/NetworkException.java b/project/src/main/java/exception/NetworkException.java
new file mode 100644
index 0000000..64fa86a
--- /dev/null
+++ b/project/src/main/java/exception/NetworkException.java
@@ -0,0 +1,20 @@
+package exception;
+
+public class NetworkException extends CrawlerException {
+
+ public NetworkException(String message) {
+ super(message);
+ }
+
+ public NetworkException(String message, String source) {
+ super(message, source);
+ }
+
+ public NetworkException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public NetworkException(String message, String source, Throwable cause) {
+ super(message, source, cause);
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/exception/ParseException.java b/project/src/main/java/exception/ParseException.java
new file mode 100644
index 0000000..0f327e4
--- /dev/null
+++ b/project/src/main/java/exception/ParseException.java
@@ -0,0 +1,20 @@
+package exception;
+
+public class ParseException extends CrawlerException {
+
+ public ParseException(String message) {
+ super(message);
+ }
+
+ public ParseException(String message, String source) {
+ super(message, source);
+ }
+
+ public ParseException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ParseException(String message, String source, Throwable cause) {
+ super(message, source, cause);
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/exception/StorageException.java b/project/src/main/java/exception/StorageException.java
new file mode 100644
index 0000000..678ccf3
--- /dev/null
+++ b/project/src/main/java/exception/StorageException.java
@@ -0,0 +1,20 @@
+package exception;
+
+public class StorageException extends CrawlerException {
+
+ public StorageException(String message) {
+ super(message);
+ }
+
+ public StorageException(String message, String source) {
+ super(message, source);
+ }
+
+ public StorageException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public StorageException(String message, String source, Throwable cause) {
+ super(message, source, cause);
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/exception/ValidationException.java b/project/src/main/java/exception/ValidationException.java
new file mode 100644
index 0000000..dc460d3
--- /dev/null
+++ b/project/src/main/java/exception/ValidationException.java
@@ -0,0 +1,20 @@
+package exception;
+
+public class ValidationException extends CrawlerException {
+
+ public ValidationException(String message) {
+ super(message);
+ }
+
+ public ValidationException(String message, String source) {
+ super(message, source);
+ }
+
+ public ValidationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ValidationException(String message, String source, Throwable cause) {
+ super(message, source, cause);
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/main/CrawlerManager.java b/project/src/main/java/main/CrawlerManager.java
new file mode 100644
index 0000000..cf4bb06
--- /dev/null
+++ b/project/src/main/java/main/CrawlerManager.java
@@ -0,0 +1,236 @@
+package main;
+
+import config.CrawlerConfig;
+import crawler.BaseCrawler;
+import crawler.DoubanCrawler;
+import crawler.ImdbCrawler;
+import crawler.MaoyanCrawler;
+import crawler.RottenTomatoesCrawler;
+import model.Book;
+import model.Movie;
+import storage.DataStorage;
+import storage.FileStorage;
+import storage.SQLiteStorage;
+import storage.StorageStats;
+import util.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class CrawlerManager {
+ private List crawlers;
+ private DataStorage databaseStorage;
+ private DataStorage fileStorage;
+
+ public CrawlerManager() {
+ crawlers = new ArrayList<>();
+
+ CrawlerConfig.load();
+
+ if (CrawlerConfig.isDatabaseEnabled()) {
+ databaseStorage = new SQLiteStorage();
+ Logger.info("数据库存储已启用");
+ }
+ if (CrawlerConfig.isFileOutputEnabled()) {
+ fileStorage = new FileStorage(CrawlerConfig.getOutputDir());
+ Logger.info("文件输出已启用");
+ }
+
+ registerCrawler(new DoubanCrawler());
+ registerCrawler(new MaoyanCrawler());
+ registerCrawler(new RottenTomatoesCrawler());
+ }
+
+ public void registerCrawler(BaseCrawler crawler) {
+ if (databaseStorage != null) {
+ crawler.setStorage(new MultiStorage(databaseStorage, fileStorage));
+ } else {
+ crawler.setStorage(fileStorage);
+ }
+ crawlers.add(crawler);
+ Logger.info("已注册爬虫: " + crawler.getName());
+ }
+
+ public void runAll() {
+ Logger.info("开始运行所有爬虫,共 " + crawlers.size() + " 个");
+ for (BaseCrawler crawler : crawlers) {
+ crawler.crawl();
+ System.out.println();
+ }
+ showStats();
+ }
+
+ public void runCrawler(String name) {
+ for (BaseCrawler crawler : crawlers) {
+ if (crawler.getName().equals(name)) {
+ crawler.crawl();
+ showStats();
+ return;
+ }
+ }
+ Logger.error("未找到爬虫: " + name);
+ }
+
+ public void showStats() {
+ if (databaseStorage != null) {
+ StorageStats stats = databaseStorage.getStats();
+ System.out.println("\n========== 数据库统计 ==========");
+ System.out.println("总记录数: " + stats.getTotalCount());
+ System.out.println("数据源数量: " + stats.getSourceCount());
+ System.out.println("================================\n");
+ }
+ }
+
+ public void showMenu() {
+ System.out.println("\n========== 爬虫管理系统 ==========");
+ System.out.println("1. 运行所有爬虫");
+ System.out.println("2. 运行指定爬虫");
+ System.out.println("3. 查看统计信息");
+ System.out.println("4. 清空数据库");
+ System.out.println("5. 退出");
+ System.out.println("==================================");
+ System.out.print("请选择操作: ");
+ }
+
+ public void interactive() {
+ Scanner scanner = new Scanner(System.in);
+
+ while (true) {
+ showMenu();
+ String choice = scanner.nextLine().trim();
+
+ switch (choice) {
+ case "1":
+ runAll();
+ break;
+
+ case "2":
+ System.out.println("\n可用爬虫:");
+ for (int i = 0; i < crawlers.size(); i++) {
+ System.out.println((i + 1) + ". " + crawlers.get(i).getName());
+ }
+ System.out.print("请输入爬虫名称: ");
+ String crawlerName = scanner.nextLine().trim();
+ runCrawler(crawlerName);
+ break;
+
+ case "3":
+ showStats();
+ break;
+
+ case "4":
+ System.out.print("确定要清空所有数据吗?(yes/no): ");
+ String confirm = scanner.nextLine().trim();
+ if ("yes".equalsIgnoreCase(confirm) && databaseStorage != null) {
+ databaseStorage.clearAll();
+ }
+ break;
+
+ case "5":
+ System.out.println("再见!");
+ close();
+ return;
+
+ default:
+ System.out.println("无效选择,请重试");
+ }
+ }
+ }
+
+ public void close() {
+ if (databaseStorage != null) {
+ databaseStorage.close();
+ }
+ }
+
+ private static class MultiStorage implements DataStorage {
+ private DataStorage primary;
+ private DataStorage secondary;
+
+ public MultiStorage(DataStorage primary, DataStorage secondary) {
+ this.primary = primary;
+ this.secondary = secondary;
+ }
+
+ @Override
+ public void save(Movie movie) {
+ primary.save(movie);
+ if (secondary != null) secondary.save(movie);
+ }
+
+ @Override
+ public void saveBatch(List movies) {
+ primary.saveBatch(movies);
+ if (secondary != null) secondary.saveBatch(movies);
+ }
+
+ @Override
+ public List findAll() {
+ return primary.findAll();
+ }
+
+ @Override
+ public List findBySource(String source) {
+ return primary.findBySource(source);
+ }
+
+ @Override
+ public List findByRankRange(int start, int end) {
+ return primary.findByRankRange(start, end);
+ }
+
+ @Override
+ public void saveBook(Book book) {
+ primary.saveBook(book);
+ if (secondary != null) secondary.saveBook(book);
+ }
+
+ @Override
+ public void saveBookBatch(List books) {
+ primary.saveBookBatch(books);
+ if (secondary != null) secondary.saveBookBatch(books);
+ }
+
+ @Override
+ public List findAllBooks() {
+ return primary.findAllBooks();
+ }
+
+ @Override
+ public List findBooksBySource(String source) {
+ return primary.findBooksBySource(source);
+ }
+
+ @Override
+ public void deleteBySource(String source) {
+ primary.deleteBySource(source);
+ }
+
+ @Override
+ public void clearAll() {
+ primary.clearAll();
+ }
+
+ @Override
+ public StorageStats getStats() {
+ return primary.getStats();
+ }
+
+ @Override
+ public void close() {
+ primary.close();
+ }
+ }
+
+ public static void main(String[] args) {
+ CrawlerManager manager = new CrawlerManager();
+
+ if (args.length > 0 && args[0].equals("--auto")) {
+ manager.runAll();
+ manager.close();
+ } else {
+ manager.interactive();
+ }
+ }
+}
diff --git a/project/src/main/java/model/Book.java b/project/src/main/java/model/Book.java
new file mode 100644
index 0000000..09959e7
--- /dev/null
+++ b/project/src/main/java/model/Book.java
@@ -0,0 +1,86 @@
+package model;
+
+import java.time.LocalDateTime;
+
+public class Book {
+ private Integer id;
+ private String source;
+ private Integer rank;
+ private String title;
+ private String author;
+ private String publisher;
+ private String year;
+ private Double price;
+ private Double rating;
+ private Integer ratingCount;
+ private String category;
+ private String description;
+ private String url;
+ private String imageUrl;
+ private String isbn;
+ private LocalDateTime crawlTime;
+
+ public Book() {}
+
+ public Book(String source, Integer rank, String title, Double rating) {
+ this.source = source;
+ this.rank = rank;
+ this.title = title;
+ this.rating = rating;
+ this.crawlTime = LocalDateTime.now();
+ }
+
+ public Integer getId() { return id; }
+ public void setId(Integer id) { this.id = id; }
+
+ public String getSource() { return source; }
+ public void setSource(String source) { this.source = source; }
+
+ public Integer getRank() { return rank; }
+ public void setRank(Integer rank) { this.rank = rank; }
+
+ public String getTitle() { return title; }
+ public void setTitle(String title) { this.title = title; }
+
+ public String getAuthor() { return author; }
+ public void setAuthor(String author) { this.author = author; }
+
+ public String getPublisher() { return publisher; }
+ public void setPublisher(String publisher) { this.publisher = publisher; }
+
+ public String getYear() { return year; }
+ public void setYear(String year) { this.year = year; }
+
+ public Double getPrice() { return price; }
+ public void setPrice(Double price) { this.price = price; }
+
+ public Double getRating() { return rating; }
+ public void setRating(Double rating) { this.rating = rating; }
+
+ public Integer getRatingCount() { return ratingCount; }
+ public void setRatingCount(Integer ratingCount) { this.ratingCount = ratingCount; }
+
+ public String getCategory() { return category; }
+ public void setCategory(String category) { this.category = category; }
+
+ public String getDescription() { return description; }
+ public void setDescription(String description) { this.description = description; }
+
+ public String getUrl() { return url; }
+ public void setUrl(String url) { this.url = url; }
+
+ public String getImageUrl() { return imageUrl; }
+ public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; }
+
+ public String getIsbn() { return isbn; }
+ public void setIsbn(String isbn) { this.isbn = isbn; }
+
+ public LocalDateTime getCrawlTime() { return crawlTime; }
+ public void setCrawlTime(LocalDateTime crawlTime) { this.crawlTime = crawlTime; }
+
+ @Override
+ public String toString() {
+ return String.format("Book{source='%s', rank=%d, title='%s', rating=%.1f}",
+ source, rank, title, rating != null ? rating : 0.0);
+ }
+}
diff --git a/project/src/main/java/model/Movie.java b/project/src/main/java/model/Movie.java
new file mode 100644
index 0000000..95aaa48
--- /dev/null
+++ b/project/src/main/java/model/Movie.java
@@ -0,0 +1,78 @@
+package model;
+
+import java.time.LocalDateTime;
+
+/**
+ * 电影数据模型类
+ */
+public class Movie {
+ private Integer id;
+ private String source; // 数据来源网站
+ private Integer rank; // 排名
+ private String name; // 电影名称
+ private String director; // 导演
+ private String actors; // 演员
+ private String year; // 年份
+ private Double rating; // 评分
+ private Integer ratingCount; // 评分人数
+ private String description; // 简介
+ private String url; // 详情链接
+ private String imageUrl; // 海报图片
+ private LocalDateTime crawlTime; // 爬取时间
+
+ public Movie() {}
+
+ public Movie(String source, Integer rank, String name, Double rating) {
+ this.source = source;
+ this.rank = rank;
+ this.name = name;
+ this.rating = rating;
+ this.crawlTime = LocalDateTime.now();
+ }
+
+ // Getters and Setters
+ public Integer getId() { return id; }
+ public void setId(Integer id) { this.id = id; }
+
+ public String getSource() { return source; }
+ public void setSource(String source) { this.source = source; }
+
+ public Integer getRank() { return rank; }
+ public void setRank(Integer rank) { this.rank = rank; }
+
+ public String getName() { return name; }
+ public void setName(String name) { this.name = name; }
+
+ public String getDirector() { return director; }
+ public void setDirector(String director) { this.director = director; }
+
+ public String getActors() { return actors; }
+ public void setActors(String actors) { this.actors = actors; }
+
+ public String getYear() { return year; }
+ public void setYear(String year) { this.year = year; }
+
+ public Double getRating() { return rating; }
+ public void setRating(Double rating) { this.rating = rating; }
+
+ public Integer getRatingCount() { return ratingCount; }
+ public void setRatingCount(Integer ratingCount) { this.ratingCount = ratingCount; }
+
+ public String getDescription() { return description; }
+ public void setDescription(String description) { this.description = description; }
+
+ public String getUrl() { return url; }
+ public void setUrl(String url) { this.url = url; }
+
+ public String getImageUrl() { return imageUrl; }
+ public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; }
+
+ public LocalDateTime getCrawlTime() { return crawlTime; }
+ public void setCrawlTime(LocalDateTime crawlTime) { this.crawlTime = crawlTime; }
+
+ @Override
+ public String toString() {
+ return String.format("Movie{source='%s', rank=%d, name='%s', rating=%.1f}",
+ source, rank, name, rating);
+ }
+}
diff --git a/project/src/main/java/storage/DataStorage.java b/project/src/main/java/storage/DataStorage.java
new file mode 100644
index 0000000..7c9533f
--- /dev/null
+++ b/project/src/main/java/storage/DataStorage.java
@@ -0,0 +1,34 @@
+package storage;
+
+import model.Movie;
+import model.Book;
+import java.util.List;
+
+public interface DataStorage {
+
+ void save(Movie movie);
+
+ void saveBatch(List movies);
+
+ List findAll();
+
+ List findBySource(String source);
+
+ List findByRankRange(int start, int end);
+
+ void deleteBySource(String source);
+
+ void clearAll();
+
+ StorageStats getStats();
+
+ void close();
+
+ void saveBook(model.Book book);
+
+ void saveBookBatch(List books);
+
+ List findAllBooks();
+
+ List findBooksBySource(String source);
+}
diff --git a/project/src/main/java/storage/FileStorage.java b/project/src/main/java/storage/FileStorage.java
new file mode 100644
index 0000000..60a24f5
--- /dev/null
+++ b/project/src/main/java/storage/FileStorage.java
@@ -0,0 +1,237 @@
+package storage;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import model.Book;
+import model.Movie;
+
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+public class FileStorage implements DataStorage {
+ private static final Gson gson = new GsonBuilder()
+ .setPrettyPrinting()
+ .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter())
+ .create();
+
+ private final String outputDir;
+
+ public FileStorage() {
+ this("output");
+ }
+
+ public FileStorage(String outputDir) {
+ this.outputDir = outputDir;
+ File dir = new File(outputDir);
+ if (!dir.exists()) {
+ dir.mkdirs();
+ }
+ }
+
+ @Override
+ public void save(Movie movie) {
+ List list = new ArrayList<>();
+ list.add(movie);
+ saveBatch(list);
+ }
+
+ @Override
+ public void saveBatch(List movies) {
+ if (movies.isEmpty()) return;
+
+ String source = movies.get(0).getSource();
+
+ saveMoviesAsJson(movies, source);
+ saveMoviesAsTxt(movies, source);
+ }
+
+ private void saveMoviesAsJson(List movies, String source) {
+ String filename = outputDir + "/" + sanitizeFilename(source) + "_" +
+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + ".json";
+
+ try (Writer writer = new OutputStreamWriter(
+ new FileOutputStream(filename), StandardCharsets.UTF_8)) {
+ gson.toJson(movies, writer);
+ System.out.println("JSON文件已保存: " + filename);
+ } catch (IOException e) {
+ System.err.println("保存JSON失败: " + e.getMessage());
+ }
+ }
+
+ private void saveMoviesAsTxt(List movies, String source) {
+ String filename = outputDir + "/" + sanitizeFilename(source) + "_" +
+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + ".txt";
+
+ try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
+ new FileOutputStream(filename), StandardCharsets.UTF_8))) {
+
+ writer.write("==========================================");
+ writer.newLine();
+ writer.write(" 数据来源: " + source);
+ writer.newLine();
+ writer.write(" 爬取时间: " + LocalDateTime.now());
+ writer.newLine();
+ writer.write(" 电影数量: " + movies.size());
+ writer.newLine();
+ writer.write("==========================================");
+ writer.newLine();
+ writer.newLine();
+
+ for (Movie movie : movies) {
+ writer.write(String.format("排名: %d", movie.getRank()));
+ writer.newLine();
+ writer.write(String.format("电影: %s", movie.getName()));
+ writer.newLine();
+ writer.write(String.format("评分: %.1f", movie.getRating()));
+ writer.newLine();
+ if (movie.getDirector() != null) {
+ writer.write(String.format("导演: %s", movie.getDirector()));
+ writer.newLine();
+ }
+ if (movie.getYear() != null) {
+ writer.write(String.format("年份: %s", movie.getYear()));
+ writer.newLine();
+ }
+ writer.write("------------------------------------------");
+ writer.newLine();
+ }
+
+ System.out.println("TXT文件已保存: " + filename);
+ } catch (IOException e) {
+ System.err.println("保存TXT失败: " + e.getMessage());
+ }
+ }
+
+ @Override
+ public void saveBook(Book book) {
+ List list = new ArrayList<>();
+ list.add(book);
+ saveBookBatch(list);
+ }
+
+ @Override
+ public void saveBookBatch(List books) {
+ if (books.isEmpty()) return;
+
+ String source = books.get(0).getSource();
+
+ saveBooksAsJson(books, source);
+ saveBooksAsTxt(books, source);
+ }
+
+ private void saveBooksAsJson(List books, String source) {
+ String filename = outputDir + "/" + sanitizeFilename(source) + "_" +
+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + ".json";
+
+ try (Writer writer = new OutputStreamWriter(
+ new FileOutputStream(filename), StandardCharsets.UTF_8)) {
+ gson.toJson(books, writer);
+ System.out.println("JSON文件已保存: " + filename);
+ } catch (IOException e) {
+ System.err.println("保存JSON失败: " + e.getMessage());
+ }
+ }
+
+ private void saveBooksAsTxt(List books, String source) {
+ String filename = outputDir + "/" + sanitizeFilename(source) + "_" +
+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + ".txt";
+
+ try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
+ new FileOutputStream(filename), StandardCharsets.UTF_8))) {
+
+ writer.write("==========================================");
+ writer.newLine();
+ writer.write(" 数据来源: " + source);
+ writer.newLine();
+ writer.write(" 爬取时间: " + LocalDateTime.now());
+ writer.newLine();
+ writer.write(" 图书数量: " + books.size());
+ writer.newLine();
+ writer.write("==========================================");
+ writer.newLine();
+ writer.newLine();
+
+ for (Book book : books) {
+ if (book.getRank() != null) {
+ writer.write(String.format("排名: %d", book.getRank()));
+ writer.newLine();
+ }
+ writer.write(String.format("书名: %s", book.getTitle()));
+ writer.newLine();
+ if (book.getRating() != null) {
+ writer.write(String.format("评分: %.1f", book.getRating()));
+ writer.newLine();
+ }
+ if (book.getAuthor() != null) {
+ writer.write(String.format("作者: %s", book.getAuthor()));
+ writer.newLine();
+ }
+ if (book.getPublisher() != null) {
+ writer.write(String.format("出版社: %s", book.getPublisher()));
+ writer.newLine();
+ }
+ if (book.getPrice() != null) {
+ writer.write(String.format("价格: %.2f", book.getPrice()));
+ writer.newLine();
+ }
+ if (book.getYear() != null) {
+ writer.write(String.format("年份: %s", book.getYear()));
+ writer.newLine();
+ }
+ writer.write("------------------------------------------");
+ writer.newLine();
+ }
+
+ System.out.println("TXT文件已保存: " + filename);
+ } catch (IOException e) {
+ System.err.println("保存TXT失败: " + e.getMessage());
+ }
+ }
+
+ private String sanitizeFilename(String filename) {
+ return filename.replaceAll("[\\\\/:*?\"<>|]", "_");
+ }
+
+ @Override
+ public List findAll() {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public List findBySource(String source) {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public List findByRankRange(int start, int end) {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public List findAllBooks() {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public List findBooksBySource(String source) {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public void deleteBySource(String source) {}
+
+ @Override
+ public void clearAll() {}
+
+ @Override
+ public StorageStats getStats() {
+ return new StorageStats(0, 0);
+ }
+
+ @Override
+ public void close() {}
+}
diff --git a/project/src/main/java/storage/LocalDateTimeAdapter.java b/project/src/main/java/storage/LocalDateTimeAdapter.java
new file mode 100644
index 0000000..9619ac9
--- /dev/null
+++ b/project/src/main/java/storage/LocalDateTimeAdapter.java
@@ -0,0 +1,25 @@
+package storage;
+
+import com.google.gson.*;
+
+import java.lang.reflect.Type;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * Gson LocalDateTime 适配器
+ */
+public class LocalDateTimeAdapter implements JsonSerializer, JsonDeserializer {
+ private static final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+
+ @Override
+ public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) {
+ return new JsonPrimitive(formatter.format(src));
+ }
+
+ @Override
+ public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+ throws JsonParseException {
+ return LocalDateTime.parse(json.getAsString(), formatter);
+ }
+}
diff --git a/project/src/main/java/storage/SQLiteStorage.java b/project/src/main/java/storage/SQLiteStorage.java
new file mode 100644
index 0000000..cfea335
--- /dev/null
+++ b/project/src/main/java/storage/SQLiteStorage.java
@@ -0,0 +1,414 @@
+package storage;
+
+import model.Book;
+import model.Movie;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SQLiteStorage implements DataStorage {
+ private static final String DB_URL = "jdbc:sqlite:crawler.db";
+ private Connection connection;
+
+ public SQLiteStorage() {
+ try {
+ connection = DriverManager.getConnection(DB_URL);
+ initTable();
+ } catch (SQLException e) {
+ throw new RuntimeException("数据库连接失败: " + e.getMessage(), e);
+ }
+ }
+
+ private void initTable() throws SQLException {
+ String movieSql = "CREATE TABLE IF NOT EXISTS movies (" +
+ "id INTEGER PRIMARY KEY AUTOINCREMENT," +
+ "source TEXT NOT NULL," +
+ "rank INTEGER," +
+ "name TEXT NOT NULL," +
+ "director TEXT," +
+ "actors TEXT," +
+ "year TEXT," +
+ "rating REAL," +
+ "rating_count INTEGER," +
+ "description TEXT," +
+ "url TEXT," +
+ "image_url TEXT," +
+ "crawl_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP" +
+ ")";
+
+ String bookSql = "CREATE TABLE IF NOT EXISTS books (" +
+ "id INTEGER PRIMARY KEY AUTOINCREMENT," +
+ "source TEXT NOT NULL," +
+ "rank INTEGER," +
+ "title TEXT NOT NULL," +
+ "author TEXT," +
+ "publisher TEXT," +
+ "year TEXT," +
+ "price REAL," +
+ "rating REAL," +
+ "rating_count INTEGER," +
+ "category TEXT," +
+ "description TEXT," +
+ "url TEXT," +
+ "image_url TEXT," +
+ "isbn TEXT," +
+ "crawl_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP" +
+ ")";
+
+ try (Statement stmt = connection.createStatement()) {
+ stmt.execute(movieSql);
+ stmt.execute(bookSql);
+ }
+
+ String indexSql1 = "CREATE INDEX IF NOT EXISTS idx_movie_source ON movies(source)";
+ String indexSql2 = "CREATE INDEX IF NOT EXISTS idx_book_source ON books(source)";
+ try (Statement stmt = connection.createStatement()) {
+ stmt.execute(indexSql1);
+ stmt.execute(indexSql2);
+ }
+ }
+
+ @Override
+ public void save(Movie movie) {
+ String sql = "INSERT INTO movies (source, rank, name, director, actors, year, " +
+ "rating, rating_count, description, url, image_url, crawl_time) " +
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+ try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
+ pstmt.setString(1, movie.getSource());
+ pstmt.setObject(2, movie.getRank());
+ pstmt.setString(3, movie.getName());
+ pstmt.setString(4, movie.getDirector());
+ pstmt.setString(5, movie.getActors());
+ pstmt.setString(6, movie.getYear());
+ pstmt.setObject(7, movie.getRating());
+ pstmt.setObject(8, movie.getRatingCount());
+ pstmt.setString(9, movie.getDescription());
+ pstmt.setString(10, movie.getUrl());
+ pstmt.setString(11, movie.getImageUrl());
+ pstmt.setTimestamp(12, movie.getCrawlTime() != null ?
+ Timestamp.valueOf(movie.getCrawlTime()) : null);
+ pstmt.executeUpdate();
+ } catch (SQLException e) {
+ System.err.println("保存电影失败: " + movie.getName() + " - " + e.getMessage());
+ }
+ }
+
+ @Override
+ public void saveBatch(List movies) {
+ String sql = "INSERT INTO movies (source, rank, name, director, actors, year, " +
+ "rating, rating_count, description, url, image_url, crawl_time) " +
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+ try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
+ connection.setAutoCommit(false);
+
+ for (Movie movie : movies) {
+ pstmt.setString(1, movie.getSource());
+ pstmt.setObject(2, movie.getRank());
+ pstmt.setString(3, movie.getName());
+ pstmt.setString(4, movie.getDirector());
+ pstmt.setString(5, movie.getActors());
+ pstmt.setString(6, movie.getYear());
+ pstmt.setObject(7, movie.getRating());
+ pstmt.setObject(8, movie.getRatingCount());
+ pstmt.setString(9, movie.getDescription());
+ pstmt.setString(10, movie.getUrl());
+ pstmt.setString(11, movie.getImageUrl());
+ pstmt.setTimestamp(12, movie.getCrawlTime() != null ?
+ Timestamp.valueOf(movie.getCrawlTime()) : null);
+ pstmt.addBatch();
+ }
+
+ pstmt.executeBatch();
+ connection.commit();
+ System.out.println("批量保存 " + movies.size() + " 条数据成功");
+ } catch (SQLException e) {
+ try {
+ connection.rollback();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+ System.err.println("批量保存失败: " + e.getMessage());
+ } finally {
+ try {
+ connection.setAutoCommit(true);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public void saveBook(Book book) {
+ String sql = "INSERT INTO books (source, rank, title, author, publisher, year, " +
+ "price, rating, rating_count, category, description, url, image_url, isbn, crawl_time) " +
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+ try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
+ pstmt.setString(1, book.getSource());
+ pstmt.setObject(2, book.getRank());
+ pstmt.setString(3, book.getTitle());
+ pstmt.setString(4, book.getAuthor());
+ pstmt.setString(5, book.getPublisher());
+ pstmt.setString(6, book.getYear());
+ pstmt.setObject(7, book.getPrice());
+ pstmt.setObject(8, book.getRating());
+ pstmt.setObject(9, book.getRatingCount());
+ pstmt.setString(10, book.getCategory());
+ pstmt.setString(11, book.getDescription());
+ pstmt.setString(12, book.getUrl());
+ pstmt.setString(13, book.getImageUrl());
+ pstmt.setString(14, book.getIsbn());
+ pstmt.setTimestamp(15, book.getCrawlTime() != null ?
+ Timestamp.valueOf(book.getCrawlTime()) : null);
+ pstmt.executeUpdate();
+ } catch (SQLException e) {
+ System.err.println("保存图书失败: " + book.getTitle() + " - " + e.getMessage());
+ }
+ }
+
+ @Override
+ public void saveBookBatch(List books) {
+ String sql = "INSERT INTO books (source, rank, title, author, publisher, year, " +
+ "price, rating, rating_count, category, description, url, image_url, isbn, crawl_time) " +
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+ try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
+ connection.setAutoCommit(false);
+
+ for (Book book : books) {
+ pstmt.setString(1, book.getSource());
+ pstmt.setObject(2, book.getRank());
+ pstmt.setString(3, book.getTitle());
+ pstmt.setString(4, book.getAuthor());
+ pstmt.setString(5, book.getPublisher());
+ pstmt.setString(6, book.getYear());
+ pstmt.setObject(7, book.getPrice());
+ pstmt.setObject(8, book.getRating());
+ pstmt.setObject(9, book.getRatingCount());
+ pstmt.setString(10, book.getCategory());
+ pstmt.setString(11, book.getDescription());
+ pstmt.setString(12, book.getUrl());
+ pstmt.setString(13, book.getImageUrl());
+ pstmt.setString(14, book.getIsbn());
+ pstmt.setTimestamp(15, book.getCrawlTime() != null ?
+ Timestamp.valueOf(book.getCrawlTime()) : null);
+ pstmt.addBatch();
+ }
+
+ pstmt.executeBatch();
+ connection.commit();
+ System.out.println("批量保存 " + books.size() + " 条图书数据成功");
+ } catch (SQLException e) {
+ try {
+ connection.rollback();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+ System.err.println("批量保存图书失败: " + e.getMessage());
+ } finally {
+ try {
+ connection.setAutoCommit(true);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public List findAll() {
+ List movies = new ArrayList<>();
+ String sql = "SELECT * FROM movies ORDER BY source, rank";
+
+ try (Statement stmt = connection.createStatement();
+ ResultSet rs = stmt.executeQuery(sql)) {
+ while (rs.next()) {
+ movies.add(mapResultSetToMovie(rs));
+ }
+ } catch (SQLException e) {
+ System.err.println("查询失败: " + e.getMessage());
+ }
+ return movies;
+ }
+
+ @Override
+ public List findBySource(String source) {
+ List movies = new ArrayList<>();
+ String sql = "SELECT * FROM movies WHERE source = ? ORDER BY rank";
+
+ try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
+ pstmt.setString(1, source);
+ ResultSet rs = pstmt.executeQuery();
+ while (rs.next()) {
+ movies.add(mapResultSetToMovie(rs));
+ }
+ } catch (SQLException e) {
+ System.err.println("查询失败: " + e.getMessage());
+ }
+ return movies;
+ }
+
+ @Override
+ public List findByRankRange(int start, int end) {
+ List movies = new ArrayList<>();
+ String sql = "SELECT * FROM movies WHERE rank BETWEEN ? AND ? ORDER BY rank";
+
+ try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
+ pstmt.setInt(1, start);
+ pstmt.setInt(2, end);
+ ResultSet rs = pstmt.executeQuery();
+ while (rs.next()) {
+ movies.add(mapResultSetToMovie(rs));
+ }
+ } catch (SQLException e) {
+ System.err.println("查询失败: " + e.getMessage());
+ }
+ return movies;
+ }
+
+ @Override
+ public List findAllBooks() {
+ List books = new ArrayList<>();
+ String sql = "SELECT * FROM books ORDER BY source, rank";
+
+ try (Statement stmt = connection.createStatement();
+ ResultSet rs = stmt.executeQuery(sql)) {
+ while (rs.next()) {
+ books.add(mapResultSetToBook(rs));
+ }
+ } catch (SQLException e) {
+ System.err.println("查询失败: " + e.getMessage());
+ }
+ return books;
+ }
+
+ @Override
+ public List findBooksBySource(String source) {
+ List books = new ArrayList<>();
+ String sql = "SELECT * FROM books WHERE source = ? ORDER BY rank";
+
+ try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
+ pstmt.setString(1, source);
+ ResultSet rs = pstmt.executeQuery();
+ while (rs.next()) {
+ books.add(mapResultSetToBook(rs));
+ }
+ } catch (SQLException e) {
+ System.err.println("查询失败: " + e.getMessage());
+ }
+ return books;
+ }
+
+ @Override
+ public void deleteBySource(String source) {
+ String sql1 = "DELETE FROM movies WHERE source = ?";
+ String sql2 = "DELETE FROM books WHERE source = ?";
+ try (PreparedStatement pstmt1 = connection.prepareStatement(sql1);
+ PreparedStatement pstmt2 = connection.prepareStatement(sql2)) {
+ pstmt1.setString(1, source);
+ pstmt2.setString(1, source);
+ int count1 = pstmt1.executeUpdate();
+ int count2 = pstmt2.executeUpdate();
+ System.out.println("删除 " + source + " 的 " + (count1 + count2) + " 条数据");
+ } catch (SQLException e) {
+ System.err.println("删除失败: " + e.getMessage());
+ }
+ }
+
+ @Override
+ public void clearAll() {
+ try (Statement stmt = connection.createStatement()) {
+ stmt.execute("DELETE FROM movies");
+ stmt.execute("DELETE FROM books");
+ System.out.println("清空所有数据");
+ } catch (SQLException e) {
+ System.err.println("清空失败: " + e.getMessage());
+ }
+ }
+
+ @Override
+ public StorageStats getStats() {
+ int totalCount = 0;
+ int sourceCount = 0;
+
+ try (Statement stmt = connection.createStatement()) {
+ ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM movies");
+ if (rs.next()) {
+ totalCount = rs.getInt(1);
+ }
+ rs = stmt.executeQuery("SELECT COUNT(*) FROM books");
+ if (rs.next()) {
+ totalCount += rs.getInt(1);
+ }
+ rs = stmt.executeQuery("SELECT COUNT(DISTINCT source) FROM movies");
+ if (rs.next()) {
+ sourceCount = rs.getInt(1);
+ }
+ rs = stmt.executeQuery("SELECT COUNT(DISTINCT source) FROM books");
+ if (rs.next()) {
+ sourceCount += rs.getInt(1);
+ }
+ } catch (SQLException e) {
+ System.err.println("统计失败: " + e.getMessage());
+ }
+ return new StorageStats(totalCount, sourceCount);
+ }
+
+ @Override
+ public void close() {
+ try {
+ if (connection != null && !connection.isClosed()) {
+ connection.close();
+ }
+ } catch (SQLException e) {
+ System.err.println("关闭连接失败: " + e.getMessage());
+ }
+ }
+
+ private Movie mapResultSetToMovie(ResultSet rs) throws SQLException {
+ Movie movie = new Movie();
+ movie.setId(rs.getInt("id"));
+ movie.setSource(rs.getString("source"));
+ movie.setRank(rs.getInt("rank"));
+ movie.setName(rs.getString("name"));
+ movie.setDirector(rs.getString("director"));
+ movie.setActors(rs.getString("actors"));
+ movie.setYear(rs.getString("year"));
+ movie.setRating(rs.getDouble("rating"));
+ movie.setRatingCount(rs.getInt("rating_count"));
+ movie.setDescription(rs.getString("description"));
+ movie.setUrl(rs.getString("url"));
+ movie.setImageUrl(rs.getString("image_url"));
+ Timestamp ts = rs.getTimestamp("crawl_time");
+ if (ts != null) {
+ movie.setCrawlTime(ts.toLocalDateTime());
+ }
+ return movie;
+ }
+
+ private Book mapResultSetToBook(ResultSet rs) throws SQLException {
+ Book book = new Book();
+ book.setId(rs.getInt("id"));
+ book.setSource(rs.getString("source"));
+ book.setRank(rs.getInt("rank"));
+ book.setTitle(rs.getString("title"));
+ book.setAuthor(rs.getString("author"));
+ book.setPublisher(rs.getString("publisher"));
+ book.setYear(rs.getString("year"));
+ book.setPrice(rs.getDouble("price"));
+ book.setRating(rs.getDouble("rating"));
+ book.setRatingCount(rs.getInt("rating_count"));
+ book.setCategory(rs.getString("category"));
+ book.setDescription(rs.getString("description"));
+ book.setUrl(rs.getString("url"));
+ book.setImageUrl(rs.getString("image_url"));
+ book.setIsbn(rs.getString("isbn"));
+ Timestamp ts = rs.getTimestamp("crawl_time");
+ if (ts != null) {
+ book.setCrawlTime(ts.toLocalDateTime());
+ }
+ return book;
+ }
+}
diff --git a/project/src/main/java/storage/StorageStats.java b/project/src/main/java/storage/StorageStats.java
new file mode 100644
index 0000000..878d58d
--- /dev/null
+++ b/project/src/main/java/storage/StorageStats.java
@@ -0,0 +1,23 @@
+package storage;
+
+/**
+ * 存储统计信息
+ */
+public class StorageStats {
+ private int totalCount;
+ private int sourceCount;
+
+ public StorageStats(int totalCount, int sourceCount) {
+ this.totalCount = totalCount;
+ this.sourceCount = sourceCount;
+ }
+
+ public int getTotalCount() { return totalCount; }
+ public int getSourceCount() { return sourceCount; }
+
+ @Override
+ public String toString() {
+ return String.format("StorageStats{totalCount=%d, sourceCount=%d}",
+ totalCount, sourceCount);
+ }
+}
diff --git a/project/src/main/java/strategy/AbstractBookCrawlerStrategy.java b/project/src/main/java/strategy/AbstractBookCrawlerStrategy.java
new file mode 100644
index 0000000..403cdf7
--- /dev/null
+++ b/project/src/main/java/strategy/AbstractBookCrawlerStrategy.java
@@ -0,0 +1,115 @@
+package strategy;
+
+import exception.CrawlerResult;
+import exception.NetworkException;
+import exception.ParseException;
+import model.Book;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import storage.DataStorage;
+import util.Logger;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class AbstractBookCrawlerStrategy implements BookCrawlerStrategy {
+ protected DataStorage storage;
+ protected int delayMs = 1500;
+
+ @Override
+ public void setStorage(DataStorage storage) {
+ this.storage = storage;
+ }
+
+ @Override
+ public int getDelayMs() {
+ return delayMs;
+ }
+
+ protected Document fetchDocument(String url) throws IOException {
+ return Jsoup.connect(url)
+ .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
+ "(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
+ .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
+ .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
+ .timeout(15000)
+ .get();
+ }
+
+ protected void delay() {
+ try {
+ Thread.sleep(delayMs);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ @Override
+ public CrawlerResult execute() {
+ long startTime = System.currentTimeMillis();
+ String sourceName = getName();
+ List allBooks = new ArrayList<>();
+
+ try {
+ List urls = getPageUrls();
+ Logger.info(String.format("[%s] 开始爬取,共 %d 个页面", sourceName, urls.size()));
+
+ for (int i = 0; i < urls.size(); i++) {
+ String url = urls.get(i);
+ Logger.info(String.format("[%s] 爬取第 %d/%d 页: %s", sourceName, i + 1, urls.size(), url));
+
+ try {
+ Document doc = fetchDocument(url);
+ List books = parseBooks(doc.html());
+
+ for (Book book : books) {
+ book.setSource(sourceName);
+ }
+
+ allBooks.addAll(books);
+ Logger.info(String.format("[%s] 第 %d 页获取 %d 条数据", sourceName, i + 1, books.size()));
+
+ } catch (IOException e) {
+ Logger.error(String.format("[%s] 网络请求失败: %s", sourceName, url), e);
+ throw new NetworkException("网络请求失败: " + url, sourceName, e);
+ } catch (Exception e) {
+ Logger.error(String.format("[%s] 解析页面失败: %s", sourceName, url), e);
+ throw new ParseException("解析页面失败: " + url, sourceName, e);
+ }
+
+ if (i < urls.size() - 1) {
+ delay();
+ }
+ }
+
+ if (storage != null && !allBooks.isEmpty()) {
+ storage.saveBookBatch(allBooks);
+ Logger.info(String.format("[%s] 数据已保存到存储", sourceName));
+ }
+
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ return CrawlerResult.success(sourceName)
+ .message("爬取成功")
+ .dataCount(allBooks.size())
+ .elapsedTime(elapsedTime)
+ .build();
+
+ } catch (NetworkException e) {
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ return CrawlerResult.failure(sourceName, "NETWORK_ERROR", e.getMessage())
+ .elapsedTime(elapsedTime)
+ .build();
+ } catch (ParseException e) {
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ return CrawlerResult.failure(sourceName, "PARSE_ERROR", e.getMessage())
+ .elapsedTime(elapsedTime)
+ .build();
+ } catch (Exception e) {
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ return CrawlerResult.failure(sourceName, "UNKNOWN_ERROR", e.getMessage())
+ .elapsedTime(elapsedTime)
+ .build();
+ }
+ }
+}
diff --git a/project/src/main/java/strategy/AbstractCrawlerStrategy.java b/project/src/main/java/strategy/AbstractCrawlerStrategy.java
new file mode 100644
index 0000000..febc0c4
--- /dev/null
+++ b/project/src/main/java/strategy/AbstractCrawlerStrategy.java
@@ -0,0 +1,114 @@
+package strategy;
+
+import exception.CrawlerResult;
+import exception.NetworkException;
+import exception.ParseException;
+import model.Movie;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import storage.DataStorage;
+import util.Logger;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class AbstractCrawlerStrategy implements CrawlerStrategy {
+ protected DataStorage storage;
+ protected int delayMs = 1500;
+
+ public void setStorage(DataStorage storage) {
+ this.storage = storage;
+ }
+
+ @Override
+ public int getDelayMs() {
+ return delayMs;
+ }
+
+ protected Document fetchDocument(String url) throws IOException {
+ return Jsoup.connect(url)
+ .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
+ "(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
+ .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
+ .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
+ .timeout(15000)
+ .get();
+ }
+
+ protected void delay() {
+ try {
+ Thread.sleep(delayMs);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ @Override
+ public CrawlerResult execute() {
+ long startTime = System.currentTimeMillis();
+ String sourceName = getName();
+ List allMovies = new ArrayList<>();
+
+ try {
+ List urls = getPageUrls();
+ Logger.info(String.format("[%s] 开始爬取,共 %d 个页面", sourceName, urls.size()));
+
+ for (int i = 0; i < urls.size(); i++) {
+ String url = urls.get(i);
+ Logger.info(String.format("[%s] 爬取第 %d/%d 页: %s", sourceName, i + 1, urls.size(), url));
+
+ try {
+ Document doc = fetchDocument(url);
+ List movies = parseMovies(doc.html());
+
+ for (Movie movie : movies) {
+ movie.setSource(sourceName);
+ }
+
+ allMovies.addAll(movies);
+ Logger.info(String.format("[%s] 第 %d 页获取 %d 条数据", sourceName, i + 1, movies.size()));
+
+ } catch (IOException e) {
+ Logger.error(String.format("[%s] 网络请求失败: %s", sourceName, url), e);
+ throw new NetworkException("网络请求失败: " + url, sourceName, e);
+ } catch (Exception e) {
+ Logger.error(String.format("[%s] 解析页面失败: %s", sourceName, url), e);
+ throw new ParseException("解析页面失败: " + url, sourceName, e);
+ }
+
+ if (i < urls.size() - 1) {
+ delay();
+ }
+ }
+
+ if (storage != null && !allMovies.isEmpty()) {
+ storage.saveBatch(allMovies);
+ Logger.info(String.format("[%s] 数据已保存到存储", sourceName));
+ }
+
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ return CrawlerResult.success(sourceName)
+ .message("爬取成功")
+ .dataCount(allMovies.size())
+ .elapsedTime(elapsedTime)
+ .build();
+
+ } catch (NetworkException e) {
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ return CrawlerResult.failure(sourceName, "NETWORK_ERROR", e.getMessage())
+ .elapsedTime(elapsedTime)
+ .build();
+ } catch (ParseException e) {
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ return CrawlerResult.failure(sourceName, "PARSE_ERROR", e.getMessage())
+ .elapsedTime(elapsedTime)
+ .build();
+ } catch (Exception e) {
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ return CrawlerResult.failure(sourceName, "UNKNOWN_ERROR", e.getMessage())
+ .elapsedTime(elapsedTime)
+ .build();
+ }
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/strategy/BookCrawlerStrategy.java b/project/src/main/java/strategy/BookCrawlerStrategy.java
new file mode 100644
index 0000000..3947808
--- /dev/null
+++ b/project/src/main/java/strategy/BookCrawlerStrategy.java
@@ -0,0 +1,15 @@
+package strategy;
+
+import exception.CrawlerResult;
+import storage.DataStorage;
+import java.util.List;
+
+public interface BookCrawlerStrategy {
+ String getName();
+ String getBaseUrl();
+ List getPageUrls();
+ List parseBooks(String htmlContent);
+ CrawlerResult execute();
+ int getDelayMs();
+ void setStorage(DataStorage storage);
+}
diff --git a/project/src/main/java/strategy/CrawlerStrategy.java b/project/src/main/java/strategy/CrawlerStrategy.java
new file mode 100644
index 0000000..e76baa6
--- /dev/null
+++ b/project/src/main/java/strategy/CrawlerStrategy.java
@@ -0,0 +1,16 @@
+package strategy;
+
+import exception.CrawlerResult;
+import model.Movie;
+import storage.DataStorage;
+import java.util.List;
+
+public interface CrawlerStrategy {
+ String getName();
+ String getBaseUrl();
+ List getPageUrls();
+ List parseMovies(String htmlContent);
+ CrawlerResult execute();
+ int getDelayMs();
+ void setStorage(DataStorage storage);
+}
\ No newline at end of file
diff --git a/project/src/main/java/strategy/impl/BooksToScrapeStrategy.java b/project/src/main/java/strategy/impl/BooksToScrapeStrategy.java
new file mode 100644
index 0000000..0c23fa7
--- /dev/null
+++ b/project/src/main/java/strategy/impl/BooksToScrapeStrategy.java
@@ -0,0 +1,116 @@
+package strategy.impl;
+
+import model.Book;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import strategy.AbstractBookCrawlerStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BooksToScrapeStrategy extends AbstractBookCrawlerStrategy {
+ private static final String NAME = "BooksToScrape";
+ private static final String BASE_URL = "https://books.toscrape.com";
+
+ public BooksToScrapeStrategy() {
+ this.delayMs = 1000;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public String getBaseUrl() {
+ return BASE_URL;
+ }
+
+ @Override
+ public List getPageUrls() {
+ List urls = new ArrayList<>();
+ urls.add(BASE_URL);
+ for (int i = 2; i <= 50; i++) {
+ urls.add(BASE_URL + "/catalogue/page-" + i + ".html");
+ }
+ return urls;
+ }
+
+ @Override
+ public List parseBooks(String htmlContent) {
+ List books = new ArrayList<>();
+ Document doc = Jsoup.parse(htmlContent);
+ Elements items = doc.select("article.product_pod");
+
+ int rank = 1;
+ for (Element item : items) {
+ try {
+ Book book = new Book();
+
+ Element titleElement = item.select("h3 a").first();
+ if (titleElement != null) {
+ book.setTitle(titleElement.attr("title"));
+ String href = titleElement.attr("href");
+ if (href.startsWith("../")) {
+ book.setUrl(BASE_URL + "/catalogue/" + href.substring(3));
+ } else {
+ book.setUrl(BASE_URL + "/" + href);
+ }
+ }
+
+ Element priceElement = item.select("p.price_color").first();
+ if (priceElement != null) {
+ String priceStr = priceElement.text().replace("£", "").replace("Â", "").trim();
+ try {
+ book.setPrice(Double.parseDouble(priceStr));
+ } catch (NumberFormatException e) {
+ // ignore
+ }
+ }
+
+ Element ratingElement = item.select("p.star-rating").first();
+ if (ratingElement != null) {
+ String ratingClass = ratingElement.className();
+ int rating = parseRating(ratingClass);
+ book.setRating((double) rating);
+ }
+
+ Element imgElement = item.select("img").first();
+ if (imgElement != null) {
+ String src = imgElement.attr("src");
+ if (src.startsWith("../")) {
+ book.setImageUrl(BASE_URL + "/" + src.substring(3));
+ } else {
+ book.setImageUrl(BASE_URL + "/" + src);
+ }
+ }
+
+ Element availabilityElement = item.select("p.instock.availability").first();
+ if (availabilityElement != null) {
+ String availability = availabilityElement.text().trim();
+ }
+
+ book.setRank(rank++);
+
+ if (book.getTitle() != null && !book.getTitle().isEmpty()) {
+ books.add(book);
+ }
+ } catch (Exception e) {
+ // skip invalid item
+ }
+ }
+
+ return books;
+ }
+
+ private int parseRating(String ratingClass) {
+ if (ratingClass.contains("One")) return 1;
+ if (ratingClass.contains("Two")) return 2;
+ if (ratingClass.contains("Three")) return 3;
+ if (ratingClass.contains("Four")) return 4;
+ if (ratingClass.contains("Five")) return 5;
+ return 0;
+ }
+}
diff --git a/project/src/main/java/strategy/impl/DoubanBookStrategy.java b/project/src/main/java/strategy/impl/DoubanBookStrategy.java
new file mode 100644
index 0000000..1bb2b13
--- /dev/null
+++ b/project/src/main/java/strategy/impl/DoubanBookStrategy.java
@@ -0,0 +1,159 @@
+package strategy.impl;
+
+import model.Book;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import strategy.AbstractBookCrawlerStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DoubanBookStrategy extends AbstractBookCrawlerStrategy {
+ private static final String NAME = "豆瓣读书Top250";
+ private static final String BASE_URL = "https://book.douban.com/top250";
+
+ public DoubanBookStrategy() {
+ this.delayMs = 2000;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public String getBaseUrl() {
+ return BASE_URL;
+ }
+
+ @Override
+ public List getPageUrls() {
+ List urls = new ArrayList<>();
+ for (int i = 0; i < 10; i++) {
+ urls.add(BASE_URL + "?start=" + (i * 25));
+ }
+ return urls;
+ }
+
+ @Override
+ public List parseBooks(String htmlContent) {
+ List books = new ArrayList<>();
+ Document doc = Jsoup.parse(htmlContent);
+ Elements items = doc.select("tr.item");
+
+ for (Element item : items) {
+ try {
+ Book book = new Book();
+
+ Element indent = item.select("td.indent").first();
+ if (indent != null) {
+ String rankStr = indent.select("div.starcount").text();
+ if (!rankStr.isEmpty()) {
+ book.setRank(parseNumber(rankStr));
+ }
+ }
+
+ if (book.getRank() == null) {
+ Element order = item.select("div.starcount").first();
+ if (order != null) {
+ book.setRank(parseNumber(order.text()));
+ }
+ }
+
+ Element titleElement = item.select("div.pl2 a").first();
+ if (titleElement != null) {
+ String title = titleElement.attr("title");
+ if (title.isEmpty()) {
+ title = titleElement.text().split("\\s")[0];
+ }
+ book.setTitle(title.trim());
+ book.setUrl(titleElement.attr("href"));
+ }
+
+ Element ratingElement = item.select("span.rating_nums").first();
+ if (ratingElement != null) {
+ String ratingStr = ratingElement.text();
+ if (!ratingStr.isEmpty()) {
+ book.setRating(Double.parseDouble(ratingStr));
+ }
+ }
+
+ Element countElement = item.select("span.pl").first();
+ if (countElement != null) {
+ String countText = countElement.text();
+ if (countText.contains("人评价")) {
+ String num = countText.replace("人评价", "").replace("(", "").replace(")", "").trim();
+ book.setRatingCount(parseNumber(num));
+ }
+ }
+
+ Element infoElement = item.select("p.pl").first();
+ if (infoElement != null) {
+ String info = infoElement.text();
+ parseBookInfo(book, info);
+ }
+
+ Element imgElement = item.select("img").first();
+ if (imgElement != null) {
+ book.setImageUrl(imgElement.attr("src"));
+ }
+
+ if (book.getTitle() != null && !book.getTitle().isEmpty()) {
+ books.add(book);
+ }
+ } catch (Exception e) {
+ // skip invalid item
+ }
+ }
+
+ return books;
+ }
+
+ private void parseBookInfo(Book book, String info) {
+ String[] parts = info.split(" / ");
+ for (int i = 0; i < parts.length; i++) {
+ String part = parts[i].trim();
+
+ if (i == 0 && !part.matches("\\d{4}.*") && !part.matches(".*\\d+\\.\\d+.*")) {
+ book.setAuthor(part);
+ }
+
+ if (part.matches("\\d{4}")) {
+ book.setYear(part);
+ }
+
+ if (part.contains("出版社")) {
+ book.setPublisher(part.replace("出版社", "").trim());
+ }
+
+ if (part.matches(".*\\d+\\.\\d+元")) {
+ String priceStr = part.replace("元", "").trim();
+ try {
+ book.setPrice(Double.parseDouble(priceStr));
+ } catch (NumberFormatException e) {
+ // ignore
+ }
+ }
+
+ if (part.matches("ISBN.*")) {
+ book.setIsbn(part.replace("ISBN", "").trim());
+ }
+ }
+ }
+
+ private Integer parseNumber(String str) {
+ try {
+ if (str == null || str.isEmpty()) return null;
+ str = str.replaceAll("[^0-9.]", "");
+ if (str.isEmpty()) return null;
+ if (str.contains(".")) {
+ return (int) Double.parseDouble(str);
+ }
+ return Integer.parseInt(str);
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+}
diff --git a/project/src/main/java/strategy/impl/DoubanStrategy.java b/project/src/main/java/strategy/impl/DoubanStrategy.java
new file mode 100644
index 0000000..4c130db
--- /dev/null
+++ b/project/src/main/java/strategy/impl/DoubanStrategy.java
@@ -0,0 +1,111 @@
+package strategy.impl;
+
+import model.Movie;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import strategy.AbstractCrawlerStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DoubanStrategy extends AbstractCrawlerStrategy {
+ private static final String NAME = "豆瓣电影Top250";
+ private static final String BASE_URL = "https://movie.douban.com/top250";
+
+ public DoubanStrategy() {
+ this.delayMs = 1500;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public String getBaseUrl() {
+ return BASE_URL;
+ }
+
+ @Override
+ public List getPageUrls() {
+ List urls = new ArrayList<>();
+ for (int i = 0; i < 10; i++) {
+ urls.add(BASE_URL + "?start=" + (i * 25));
+ }
+ return urls;
+ }
+
+ @Override
+ public List parseMovies(String htmlContent) {
+ List movies = new ArrayList<>();
+ Document doc = Jsoup.parse(htmlContent);
+ Elements items = doc.select("div.item");
+
+ for (Element item : items) {
+ try {
+ Movie movie = new Movie();
+
+ String rankStr = item.select("em").text();
+ movie.setRank(Integer.parseInt(rankStr));
+
+ Element titleElement = item.select("span.title").first();
+ if (titleElement != null) {
+ movie.setName(titleElement.text());
+ }
+
+ String ratingStr = item.select("span.rating_num").text();
+ if (!ratingStr.isEmpty()) {
+ movie.setRating(Double.parseDouble(ratingStr));
+ }
+
+ String ratingCountStr = item.select("div.star span").last().text();
+ if (ratingCountStr != null && ratingCountStr.contains("人评价")) {
+ String num = ratingCountStr.replace("人评价", "").trim();
+ movie.setRatingCount(parseNumber(num));
+ }
+
+ String info = item.select("div.bd p").first().text();
+ if (info != null) {
+ String[] parts = info.split(" / ");
+ if (parts.length > 0) {
+ String firstPart = parts[0];
+ if (firstPart.contains("导演: ")) {
+ movie.setDirector(firstPart.replace("导演: ", "").trim());
+ }
+ for (String part : parts) {
+ if (part.matches("\\d{4}") || part.matches("\\d{4}.*")) {
+ movie.setYear(part.trim().split("\\s+")[0]);
+ break;
+ }
+ }
+ }
+ }
+
+ String link = item.select("div.hd a").attr("href");
+ movie.setUrl(link);
+
+ String imgUrl = item.select("div.pic img").attr("src");
+ movie.setImageUrl(imgUrl);
+
+ movies.add(movie);
+ } catch (Exception e) {
+ // skip invalid item
+ }
+ }
+
+ return movies;
+ }
+
+ private Integer parseNumber(String str) {
+ try {
+ if (str.contains("万")) {
+ return (int) (Double.parseDouble(str.replace("万", "")) * 10000);
+ }
+ return Integer.parseInt(str.replace(",", ""));
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/strategy/impl/MaoyanStrategy.java b/project/src/main/java/strategy/impl/MaoyanStrategy.java
new file mode 100644
index 0000000..85f046d
--- /dev/null
+++ b/project/src/main/java/strategy/impl/MaoyanStrategy.java
@@ -0,0 +1,94 @@
+package strategy.impl;
+
+import model.Movie;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import strategy.AbstractCrawlerStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MaoyanStrategy extends AbstractCrawlerStrategy {
+ private static final String NAME = "猫眼电影Top100";
+ private static final String BASE_URL = "https://maoyan.com/board/4";
+
+ public MaoyanStrategy() {
+ this.delayMs = 1500;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public String getBaseUrl() {
+ return BASE_URL;
+ }
+
+ @Override
+ public List getPageUrls() {
+ List urls = new ArrayList<>();
+ for (int i = 0; i < 10; i++) {
+ urls.add(BASE_URL + "?offset=" + (i * 10));
+ }
+ return urls;
+ }
+
+ @Override
+ public List parseMovies(String htmlContent) {
+ List movies = new ArrayList<>();
+ Document doc = Jsoup.parse(htmlContent);
+ Elements items = doc.select("dl.board-wrapper dd");
+
+ for (Element item : items) {
+ try {
+ Movie movie = new Movie();
+
+ String rankStr = item.select("i.board-index").text();
+ movie.setRank(Integer.parseInt(rankStr));
+
+ String name = item.select("p.name a").text();
+ movie.setName(name);
+
+ String ratingStr = item.select("i.integer").text() +
+ item.select("i.fraction").text();
+ if (!ratingStr.isEmpty()) {
+ movie.setRating(Double.parseDouble(ratingStr));
+ }
+
+ String actors = item.select("p.star").text();
+ if (actors != null && actors.contains("主演:")) {
+ movie.setActors(actors.replace("主演:", "").trim());
+ }
+
+ String releaseTime = item.select("p.releasetime").text();
+ if (releaseTime != null && releaseTime.contains("上映时间:")) {
+ String timeStr = releaseTime.replace("上映时间:", "").trim();
+ if (timeStr.matches("\\d{4}.*")) {
+ movie.setYear(timeStr.substring(0, 4));
+ }
+ }
+
+ String link = item.select("p.name a").attr("href");
+ if (!link.isEmpty()) {
+ movie.setUrl("https://maoyan.com" + link);
+ }
+
+ String imgUrl = item.select("img.board-img").attr("data-src");
+ if (imgUrl.isEmpty()) {
+ imgUrl = item.select("img.board-img").attr("src");
+ }
+ movie.setImageUrl(imgUrl);
+
+ movies.add(movie);
+ } catch (Exception e) {
+ // skip invalid item
+ }
+ }
+
+ return movies;
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/strategy/impl/RottenTomatoesStrategy.java b/project/src/main/java/strategy/impl/RottenTomatoesStrategy.java
new file mode 100644
index 0000000..0951971
--- /dev/null
+++ b/project/src/main/java/strategy/impl/RottenTomatoesStrategy.java
@@ -0,0 +1,105 @@
+package strategy.impl;
+
+import model.Movie;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import strategy.AbstractCrawlerStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RottenTomatoesStrategy extends AbstractCrawlerStrategy {
+ private static final String NAME = "烂番茄Top100";
+ private static final String BASE_URL = "https://www.rottentomatoes.com/top/bestofrt/";
+
+ public RottenTomatoesStrategy() {
+ this.delayMs = 2000;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public String getBaseUrl() {
+ return BASE_URL;
+ }
+
+ @Override
+ public List getPageUrls() {
+ List urls = new ArrayList<>();
+ urls.add(BASE_URL);
+ return urls;
+ }
+
+ @Override
+ public List parseMovies(String htmlContent) {
+ List movies = new ArrayList<>();
+ Document doc = Jsoup.parse(htmlContent);
+ Elements items = doc.select("table.table tr");
+
+ int rank = 0;
+ for (Element item : items) {
+ try {
+ Element rankElement = item.selectFirst("td.rank");
+ if (rankElement == null) continue;
+
+ Movie movie = new Movie();
+
+ String rankStr = rankElement.text();
+ if (!rankStr.isEmpty()) {
+ movie.setRank(Integer.parseInt(rankStr));
+ } else {
+ movie.setRank(++rank);
+ }
+
+ Element titleElement = item.selectFirst("td.title a");
+ if (titleElement != null) {
+ String fullTitle = titleElement.text();
+ if (fullTitle.contains("(") && fullTitle.contains(")")) {
+ int start = fullTitle.lastIndexOf("(");
+ int end = fullTitle.lastIndexOf(")");
+ if (start > 0 && end > start) {
+ String yearStr = fullTitle.substring(start + 1, end);
+ if (yearStr.matches("\\d{4}")) {
+ movie.setYear(yearStr);
+ }
+ movie.setName(fullTitle.substring(0, start).trim());
+ } else {
+ movie.setName(fullTitle);
+ }
+ } else {
+ movie.setName(fullTitle);
+ }
+
+ String link = titleElement.attr("href");
+ if (!link.isEmpty()) {
+ if (link.startsWith("/")) {
+ movie.setUrl("https://www.rottentomatoes.com" + link);
+ } else {
+ movie.setUrl(link);
+ }
+ }
+ }
+
+ Element scoreElement = item.selectFirst("td.score span.tMeterScore");
+ if (scoreElement != null) {
+ String scoreStr = scoreElement.text();
+ if (scoreStr.matches("\\d+%")) {
+ double rating = Double.parseDouble(scoreStr.replace("%", "")) / 10;
+ movie.setRating(Math.round(rating * 10) / 10.0);
+ }
+ }
+
+ movies.add(movie);
+ } catch (Exception e) {
+ // skip invalid item
+ }
+ }
+
+ return movies;
+ }
+}
\ No newline at end of file
diff --git a/project/src/main/java/util/Logger.java b/project/src/main/java/util/Logger.java
new file mode 100644
index 0000000..2702bc3
--- /dev/null
+++ b/project/src/main/java/util/Logger.java
@@ -0,0 +1,54 @@
+package util;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 简单日志工具类
+ */
+public class Logger {
+ private static final DateTimeFormatter formatter =
+ DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ public enum Level {
+ DEBUG, INFO, WARN, ERROR
+ }
+
+ private static Level currentLevel = Level.INFO;
+
+ public static void setLevel(Level level) {
+ currentLevel = level;
+ }
+
+ private static void log(Level level, String message) {
+ if (level.ordinal() >= currentLevel.ordinal()) {
+ String timestamp = LocalDateTime.now().format(formatter);
+ String threadName = Thread.currentThread().getName();
+ System.out.printf("[%s] [%s] [%s] %s%n",
+ timestamp, level, threadName, message);
+ }
+ }
+
+ public static void debug(String message) {
+ log(Level.DEBUG, message);
+ }
+
+ public static void info(String message) {
+ log(Level.INFO, message);
+ }
+
+ public static void warn(String message) {
+ log(Level.WARN, message);
+ }
+
+ public static void error(String message) {
+ log(Level.ERROR, message);
+ }
+
+ public static void error(String message, Throwable e) {
+ log(Level.ERROR, message + " - " + e.getMessage());
+ if (currentLevel == Level.DEBUG) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/project/src/main/java/view/CrawlerView.java b/project/src/main/java/view/CrawlerView.java
new file mode 100644
index 0000000..986880f
--- /dev/null
+++ b/project/src/main/java/view/CrawlerView.java
@@ -0,0 +1,109 @@
+package view;
+
+import exception.CrawlerResult;
+import java.util.List;
+
+public class CrawlerView {
+
+ public void showWelcome() {
+ System.out.println();
+ System.out.println("╔════════════════════════════════════════════════╗");
+ System.out.println("║ Java 爬虫管理系统 v3.0 (电影+图书) ║");
+ System.out.println("╚════════════════════════════════════════════════╝");
+ System.out.println();
+ }
+
+ public void showHelp() {
+ System.out.println();
+ System.out.println("═══════════════ 使用帮助 ═══════════════");
+ System.out.println(" java -jar crawler.jar <命令> [参数]");
+ System.out.println();
+ System.out.println("可用命令:");
+ System.out.println(" list - 列出所有爬虫");
+ System.out.println(" run <爬虫名> - 运行指定爬虫");
+ System.out.println(" run-all - 运行所有爬虫");
+ System.out.println(" stats - 显示统计信息");
+ System.out.println(" clear - 清空所有数据");
+ System.out.println(" help - 显示帮助信息");
+ System.out.println();
+ System.out.println("电影爬虫:");
+ System.out.println(" - 豆瓣电影Top250");
+ System.out.println(" - 猫眼电影Top100");
+ System.out.println(" - RottenTomatoes");
+ System.out.println();
+ System.out.println("图书爬虫:");
+ System.out.println(" - 豆瓣读书Top250");
+ System.out.println(" - BooksToScrape");
+ System.out.println();
+ System.out.println("示例:");
+ System.out.println(" java -jar crawler.jar list");
+ System.out.println(" java -jar crawler.jar run 豆瓣电影Top250");
+ System.out.println(" java -jar crawler.jar run 豆瓣读书Top250");
+ System.out.println(" java -jar crawler.jar run BooksToScrape");
+ System.out.println(" java -jar crawler.jar run-all");
+ System.out.println("═══════════════════════════════════════════");
+ System.out.println();
+ }
+
+ public void showCrawlerList(List crawlers) {
+ System.out.println();
+ System.out.println("═══════════════ 爬虫列表 ═══════════════");
+ for (int i = 0; i < crawlers.size(); i++) {
+ System.out.println(" " + (i + 1) + ". " + crawlers.get(i));
+ }
+ System.out.println("═══════════════════════════════════════════");
+ System.out.println();
+ }
+
+ public void showResult(CrawlerResult result) {
+ System.out.println();
+ if (result.isSuccess()) {
+ System.out.println("╔════════════════════════════════════════╗");
+ System.out.printf("║ SUCCESS: %-30s ║%n", result.getSource());
+ System.out.printf("║ 数据条数: %-28d ║%n", result.getDataCount());
+ System.out.printf("║ 耗时: %-30dms ║%n", result.getElapsedTime());
+ System.out.println("╚════════════════════════════════════════╝");
+ } else {
+ System.out.println("╔════════════════════════════════════════╗");
+ System.out.printf("║ FAILURE: [%s] %-20s ║%n", result.getErrorCode(), result.getSource());
+ System.out.printf("║ 错误信息: %-28s ║%n", result.getMessage());
+ System.out.println("╚════════════════════════════════════════╝");
+ }
+ System.out.println();
+ }
+
+ public void showResults(List results) {
+ System.out.println();
+ System.out.println("═══════════════ 执行结果 ═══════════════");
+
+ int successCount = 0;
+ int totalData = 0;
+
+ for (CrawlerResult result : results) {
+ System.out.println(result.toString());
+ if (result.isSuccess()) {
+ successCount++;
+ totalData += result.getDataCount();
+ }
+ }
+
+ System.out.println("─────────────────────────────────────────");
+ System.out.printf(" 成功: %d/%d | 总数据: %d 条%n",
+ successCount, results.size(), totalData);
+ System.out.println("═══════════════════════════════════════════");
+ System.out.println();
+ }
+
+ public void showError(String message) {
+ System.out.println();
+ System.out.println("╔════════════════════════════════════════╗");
+ System.out.println("║ 错误信息 ║");
+ System.out.printf("║ %-36s ║%n", message);
+ System.out.println("╚════════════════════════════════════════╝");
+ System.out.println();
+ }
+
+ public void showMessage(String message) {
+ System.out.println(message);
+ }
+}
diff --git a/project/src/test/TestMain.java/TestMain.java b/project/src/test/TestMain.java/TestMain.java
new file mode 100644
index 0000000..bcb1b8f
--- /dev/null
+++ b/project/src/test/TestMain.java/TestMain.java
@@ -0,0 +1,88 @@
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import java.io.FileWriter;
+import java.io.IOException;
+
+// 抽象父类:封装通用爬虫逻辑
+abstract class BaseCrawler {
+ // 封装属性
+ private String baseUrl;
+
+ public BaseCrawler(String baseUrl) {
+ this.baseUrl = baseUrl;
+ }
+
+ // 封装:获取网页文档
+ protected Document getDoc(String url) throws IOException {
+ return Jsoup.connect(url)
+ .userAgent("Mozilla/5.0")
+ .timeout(8000)
+ .get();
+ }
+
+ // 抽象方法:交给子类实现(多态基础)
+ public abstract void parse(Document doc, FileWriter writer) throws IOException;
+
+ // 封装:统一执行入口
+ public void start(FileWriter writer) {
+ try {
+ for (int i = 0; i < 10; i++) {
+ int start = i * 25;
+ String url = baseUrl + "?start=" + start;
+ System.out.println("正在爬取第 " + (i + 1) + " 页");
+
+ Document doc = getDoc(url);
+ parse(doc, writer); // 多态:调用子类的parse
+ Thread.sleep(1000);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
+
+// 子类:继承父类,实现豆瓣电影解析
+class DoubanCrawler extends BaseCrawler {
+
+ public DoubanCrawler() {
+ super("https://movie.douban.com/top250");
+ }
+
+ // 重写方法 → 多态
+ @Override
+ public void parse(Document doc, FileWriter writer) throws IOException {
+ Elements items = doc.select("div.item");
+
+ for (Element item : items) {
+ String rank = item.select("em").text();
+ String name = item.select("span.title").first().text();
+ String score = item.select("span.rating_num").text();
+
+ String line = "排名:" + rank + " 电影:" + name + " 评分:" + score;
+ System.out.println(line);
+ writer.write(line + "\r\n"); // 写入文件
+ }
+ }
+}
+
+// 主类
+public class TestMain {
+ public static void main(String[] args) {
+ try {
+ // 直接写入桌面,好找!
+ FileWriter writer = new FileWriter("douban_top250.txt");
+
+ // 多态:父类引用 指向 子类对象
+ BaseCrawler crawler = new DoubanCrawler();
+
+ crawler.start(writer);
+
+ writer.close();
+ System.out.println("===== 全部爬完,文件已保存到桌面 =====");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/project/项目报告v1(1).docx b/project/项目报告v1(1).docx
new file mode 100644
index 0000000000000000000000000000000000000000..55bd41df76eaa7236f7a095aac83965eb23adb06
GIT binary patch
literal 1281085
zcmb??V~{A#wq@J4PTRI^+cr+ywsqRJZQHi()3)6`{oOZj=G_-FKPF--DxxZ~R^`sx
zxnk!=mb?@&2o%6SN2u&R|3BCNJRpB=jBSnN9c=9!>EwT4C_fDl|ALwKTbZ&00stTb
z0RSNUSD1mF9j%+SRhEK)O+P(Cr`j1F;SMqvTpl2YD08Ax5h3C@qQ-QHy37T+3*tw&
zjRHZ}Q*%Q@I_6aUP@82SGK?x_RslO9IRK4J(F226hr=&Z@>?<=2&Gr7WtD_6+Oih@ad)zpGRu`M%YZ>nvfG_Duj3f3g_|@ct
zKV=YfP>;!;_2$M$uf3kSIv;rH&9Lo3CJuu3&Ig}NOQ}nUOFq%)$eD$@M=Vichgrf*Y!N3b
zE($@D3=@;&Mb&cmivI6fmN$%^Q~lAh@sE}f|ErdbY#mJgQFC;>fb0N0g2=P@CczzV
zT^1{9eY`TzB5G1B1W;YWg#~upYMgcY6U4=8pNhI2Ho^+N#DY8sbn?^p{ZY)wt&3?3S(yc9*9zmS`MeOEwG^iCksY4r?Y_@A
z)bZ>^*u$a%tY5j5h0^Y#6PpTr2mB4nMTin}R53
zwlqxH*(d2FHdNtUINFn1CQ~3&IFB7M+&f|b7Is#i>3}e54KnYtz-R!o!Mge}!+gp`
zoZ)%piI53Zp7-h=mm)o-aM7iqp*2HBcTwXg>(uv~C9f|eGo-5B%-T3_2dr4I4?Ac6
zK1DBLxc9?K3Bs`#la0loh>39oAhji9)6&2~tJeX%ty-V^trTC_63>!%wP7Z^YqY3W
zf6&(A7i|Lq00gG|ezocRT5Yg;pl!>gk~yK-@xpV{!6sO^08L(Vo*QivBfrtn2On+x
z;CdLM-vKRk1&zPe?=KgWmAc|BLm$hYlo&ssxS)L(UZ>ELiCD3lIECrRK&91Hb88N_
z8`f0^DUev5ZZ=}yI0{{z>HE#KHOQVHv%M(3SFgj(Hm3)KbA5h#`ejPrJK6bhWr@MA=NA7)*p3mU3j+=pqrLY!H!!rj
z@VODV;GbYheW#93=)>T)f4bYD*7LnJvE-i41Iq0TfG;^C^lVr=S^x5JL+_lzZF~xi
zcn={J}nVQjk
zqD`IJD+S$moGaej?J;Yme@Y0~B;uBS4{#Mf-|2M3A{@2G8if?j`ar%e<5
znk2DqCPYdJ#i9g;`GL@p80w^XC#W*V6)5|aJo>l1VBcjy-kaXkpSf9M`#l$TSBW$*
ztti;0D$Cp995U*;B^W^Y1}@o}J7(lPmI?LX7R@T%%Ke96Y*f>g-_}lE5GBiOu$i+w
zzTXJpK~umG(@W;uZlH0ekk9FK>bS;bA8DH;Lo@p+Z}+Og8fTT$8fR}`L%ZAX1gW;K
z#5FDp*0BR>bnvLYuPvrx+8RYQ>-1Ow
z$b!zrjxe(#xF+a<1(3w#D6w>3cdCa=L%G~H6q;|i-v(m^aum<_DUr}-+z&gi*&`-C
z=p(#cJyKqA{7*VC)6)@wZ2jJUx2b^*!zr^+3b!+AXk$#W0WNnWWrGuJ5h#Tme4{Jj
z3Rygy@eK)fcO=gP0a3EzO~%rc8O<8u=ZX*4XOZ?xxd!cB!+y?$D}N-i(ndy
zfD^PC&;7$vs`n9K6DNcRfDPOXzITdX1K7?H|M{nB`=2K7pQf@|V0wW7T2cCv`)44%2b
z$8jZ2k+U2mpwY~#X~TC`6gf@a5mwNcQL&GBS!w!zBnCMt2BUM3m_?A5+_S&|OMrSv
z#)(Wg1a?&RkeqZ;uUfxzm0Cfz)PgIB0{0Q~;N%W3`#mU2&~KExSHgvk-hr~mpFz2k
zuAyH{cWj-|I-**)-!=GWW7?pCycp(suqHo3!vwyoBd0tdS}>ekuhjc-k
zw0yaw38cCC$J4k&84Nm&vyxA)i}n}%;n&{%ueocWm(@V>h;5wS6k`7cF}%7WP^#g>
z?;GHp?>gU|&W>-p1MU7@}>9M_JE$iIr+ymx#2Q$Q|c&+Y~-ZRXZ$ZJ45%WEXjKqjlW@8nJEt4p&v)YE
zZX)%_)AxfupO_CSCax^B89fhS?NZyk9li%7+ujd!IoP1DO)Z0Ix
zPAaE*H?Za3HYkN%#!ZO-S`%<4H?xqgJWb>GP
zCTz%%K2`wVy*zyIQY-om7L40DKxs+|30o-TfTAvtWb|>ZO;AvD6ke5|3tKN|3P6^8
zlg-;EJ^dr=HAf!JLFRjS!7+(VWftSdEYe>tH>WHthc+y|3lg}+#W2<6oG5*XgQz~>
zarAB9XU7$kme;F=JtJ+@
z^1GH=sOGjAH$WMuB-5g+q}miMDCK~l>t
zv^wjki=o!hY^fv5T-FD%CxQ`esZ*NVjKV92u%(P?w$%xLRstlANVfP<+0Hs*Qk7CC
z8==lRZBpyf*0cR+62>th5oL5+;<+zibd!!yul{vMkOHd6vVi6xY%MgU%f@iFWN4yo
zb=v>gP4cK_XPxkmc#?WFTjIDZHzNu9{pf#&S5)TwBPs1~9%1=E(sVoHu1#o$uqO=5
zbFFWO>r;Q1$o$B~xE*%*8O^_SLmk)TMihQAh%FWH&*&wvDP^kufe^!^D(G~^2|w*e
ze_RYH{y%=|Ka$cK^X3=Zf3zX}qqe0XYzbq!?a>;j{~yCbMXXfP({s?Ro~UMZ^Sh2?
zOl@*!2%A`P{7WWT3(%#l+oP_atMj5;#X)zSz(l^6P6y)xSz2?iI~lH~WVCWVn4$*v
z7;0Zj-96~`P@v3xgiU5Z!NU-lHc_+FnBBI;ec&CU1I9ZZ18$%a5}jZ%xbK;lseqxK
z8V3}q&4JqqBt_oe|8Df?q5AcbI?)AINU^>@V*`nGBT^hQ_Tw1?tM`dtu_awfKV{ejzLG>6JWtXLl+o<#c62r8<28G}
zj*q`T?`n3wUY~cqK81SJ7T>j<2&~YuFkSmA@yvf~wca5~MW(gJRYAki7*{{U)Edn={ag=Q
z4y(H8N7(keqd09d!Mx#^ZL9u4cl&Vh-8Z9Zr(ua&rRc)Mvt_uh?6lDwtHpMO#$ZYE
zJO>T7ps%ciMpkDAW*x%+YhyfP^O5JMSG!aB1fRU#`hAe|ym@8}&GDeL{Kjd^G`U&n
zi80SX*`}!G3;y4OMf<~9U-zFtvHvGj_$OljS6tv|;^bsuWA-n%KTB21ai0~%=UVz3
z_`o&5dXglYgiHHks(FkRIsU4l7Iaw{T`k^zwB|a_WDjBWQr5kXGez#$=i&68s-TM}
zIRb+BK7eZH+#owV^JZ(((?{}MsiuT^pCdouAkDRR{N3yR-8Sb;-JnW9`VkQne6}-!JDYrltzfP0uM~CD*sC;Go=32dY-ANhC-vM56EcyZduM-1n0QYRI8aq{
zU|u1y%0afgl_aabHVi=N$Pd2MsZe<{AotBzxWx2KN{)U(9L%C2GCb3rXmw53s^WK~
zt)fmO3a}g>gc8~O8Mv9CRb^ElJLns@2JTW|{@Yq|V^#$s%|b6JPsISncz+_(1{LzPmM@`X6&
z8UlyZ^Lqg^psUN0M6o
zI@j0(q2N&ixeXpXIjqZ9U$aD!P2h4uNV1t;&TjgZvBm5^wPjqg}=;ntZ^E4T406{iYS;%jhKxBS&XcMTcR1e#2i-knvw1Z
zSw=Sa{-~QO8oq)K>sZ)U;TyMXj!*pGBLf3<7O>RfIa%A9tt)Q_!*0cu76cewL2V79R
zmpA}iz+vTLFaeE?n+a3Hkvqu_J%1UBSet{t?%Wtx5Y4&1I=Abu
zG%^IpibV1OinZm9^`KkbyMt*w)dty@1FUi)Dvz7#AV{|@9?nd||5;i*c@@4)=W5d-8yQk*`NkE~dgd%-@Jz77a
zlKgmSacIO;bK#gyE$<%|=Mh-FlC_h>*#t6sC^QO2Rh0CsjRpa!%68>_{MJfPKtei>
zIk2kWl1GehOfxBZ9MKS
zF4zq6`LYv+D2?eLpecq3%-i{)y2kbdSG#TC>yV_@c!-wE9`Mv
zQv2lV=Eut28iN^%J~Hr6>FhfZn614!;Vz{@C)b-xDT6Bj-z37-_}a4l+bJg+
zWp^3D@fAs$&%Wmz_#Mkhw<}O-(&^!M3P;^cXoK16jP_ZMWlE$)4%)iSr+@hk1Dc@}F=mXjbXG>yRrqBN^?_Ax;
ztbg&t4(=az{I6Ba#K!o)kYnQ?a)exiU;KjE8mVt+#E4?=GOx{Z9cbtAqofL#mm((S
z(A@TkkJ0!A!gDc97Ki5>PrBmjtDJ=sT!-W&amP#)K8r(H_Du5ndA_kvB~fYAZpdP;
z5T8){*XI6pVI5si4J)%&g5O-r?Jo%jdnjm8GG34&t4cg}ZLK2(xQIbZg0?(-asCAL
z%sLr!Z*UXAHqU~XsYHyDBUbJ#!7^Nw;dHV7lQP5o<}TrE9LFoM<*BTH))pKFxrC9^
z9JFRsK)%!*t&g2JlbaXu=E1!MS2y
zf1}w-zq0VGVjT%lk?z8{=3%HD7oJta)%7T;=^^O>f27dcp(c2sJar4tNG9z}CTdqL
z)_-cv0IoGvKlG?h8ZSl}6!J3S@4zy%&;1=ShktW79vbrrtiO0NVVLcPq|f*q0TyBy
z7x3Is2md{RgWb0MzE~jBc7;B+_Hd|Y&Yqqrp6_;ByQ06U^vmJ?mGbsg1_?aKs(35u
zr9X=vL*0Lp9y}ySuAWk2Io+Uf2#<7|nh{r&D078z*|H6)qu%p%Z4kfGp8v#DMl5C8
zmfuxuPm9^S<`b-oI4sabk?m5@9S0(?^`j@e1LG)S7T;U_J)`H}4F~Uo%IF&~06_1L
zgY!?}=U)zvxru?Xi37twY0VNJY_8J2bCDhB1nu26K1XV%Z1urWW89@KL#XiCSwwh#n8_+l190vdPt^U#Wz6KOODbBHowIrcjdna0(
z$)lO*z@1=ybfw3ZjnQ7%0kvCvuW_WdkP|x-DT*eit?T2lSzrznJp-iJ5U5}AzO?{R
z<0_&jhtRZ<%)3bsw3Xq8OLs$B1%o`MZzi@H5jPA@u|UcmRx_LN#g_S4lH>?qF`clO
z&BeMW#tDw&SwuoMhiBJO!VvPq$(a&dbubme$jNcZ*ce|QNO{k8Ki#mmWrMC
zC7GUfXR0Zvu~SKYL4oC`Nx7s|4W3IpSBZ
znJF*U?BRqx(88VarqHeB0v!ErZ=jKJ$XRr`o{$BsF2P;nOfEtjGRGHkw
zPAcXJa)z0%+!!$7Ik07(6|NHO;6tgGc8@OQ*d!CvQsiKGCdDAupi&wwk>N$=UXOdHx*v=KV4$!xTdhUvodszIk{2;`_fB
zNPdbS|6wPb%uTFK{#%)3o!PJ_=4YJ=!3F?8{deHM;Qz8Jml`s**diF+M7MaNp0-A0
zE?8pD<*RjC=JTR;T8js6Jlk2OE@muDvS--8W5mV70@&rlvB8N;g-Ja2RzM&e?EDV16MIP{?fveEz24Cx(4ZEmq)aWxLQ@gNRjT
z|7A3+G!JJg493>H?S0I-t;`?+5%Bus-(TXZQf_E##1X(4xhI(s2fHHEB314x2vZsP
z$NW^jRaGsU9+N;8nE5GW`7gG{ff0MrD&0feDa-X%eXoM?#&WW0}@WfPNV)
z!|@NK;=zv*q2h-W1)yK%n)3FIFF&GorpX!p9@93{-SN6}e+|0bE1#ptS14=Twr#Aw
zOuU2jD-+SKSvh|?E8+(3HGs(0)Y49i{u1p{8g=4-I?unbsnW1~aTEJm516WwEm^QS
zY*x<$GwxwUyTNXH9DXVfWy6oOrQOBOy0mfK8o-Vns-fF`U(q~=#k1vSC^+2%(j;r#
znJG$%g*0oS+`|UgDLuU5fGW?cq^&aSS8A$UM*4`2
zr|QiB;j+DuCr1xyq$L&-U|NFPo}qu}*WRv3p_9YyVR!!+7)u}{i|G;SV2(&aJ)G(Y
zUKq`Kemj@*@qHqAyL_+F<@>C}qSN_doX^8TOpYpWonH=~E@Z3e{=Sy1=)NIS2t)Bz)FpE~`;ewo@JDt8&qEfbsk;w17w2Hi
zt~VfvB4{Uv_X#F<*pTuZ)KtsCAn=v_G^e(*=w9>kVURn!Ou_F%!?S%jdfxK+t)a4%
zoo!~|BWkDx$4+eInMv;urC_3Xq~HfGA93+uS9tQr{dO^-K9U^r2fuu{;v@ph`8YM1
zdx;ivAonztSD4o)!v(8syw{e1V1C(hUsgCGv1MnRTvh|b~
ze#Lc>-g3Bt;f9SfDyUvD@4xbM2!0HA`qg`)+bM4b>=j^78|f6Za8Fu9g!VS^X2nil
zlngzCGH~NnowMKqUxAINe@9iwM4nCVn3^7MMeXa3;n8a5
z4I9Yw=~nnak8BQ$_&b>7p&J!fM)DiGxL#8@ByDeg749&5Fs&z#++blw^j{K*_K;#C
zOxhG$2L>B87Xl4sG5EnJk~`MoP$T=a0GNZfqjhWwRr-yumR*X0~&f2Aq8-z#+3&)j>?5Y#(RuP
z#75kt?tdD0B00)4h*6vBcf+0r&;of`vk_Uuw4@@vfvt}v;w!4_gmvP&*v1qU`tGUy
z8y7A|6IKTdYsdAj*d
zAJ}k^YQivms@h^cH-=^dQP$YU&2i*!o79YbOnVh!@hasoM04<+M&-fdpAp(rH_Z>B
z)(=FqMRDl|jq0eMM_p{7*E`&22d)ggdDU-8PT88u`VGo4|7|^^fmvMjxU>cs9h+N=
zTc(as58r59ehp*r=yh37s6jiboM==%S-D2!AiOH?xZAF~0gNJ4hRr%=(Yq_VlJlME
zI!ivEfzz_XO-i-$^U(KsdW4mU{qVkaZ5HL0PKLS#{9a{gnr$JnX~kK%C)KtAOGJ%Y
z3G84RY0lv!7eUvcA2daCLLC~nh86k%KQa<`K);P(eD@3Dl&|(n0g>@tD^yoL^aG$3
zwNDOR6C)8;`4P3_mOmZ;au0#X-n4~BGFylOL`_2+-v
zAOcMMd{Qe508kVQ{J*26pM6u#)+RPi|M&HF*fa8=e+Co6FLkRK`66_e%dZ(sfH
zJ7JTRlUVo_!b5~7XbushqZrw4+XUM$&)@7x5*@?DZL#Af@18Hf+A&h&q>h1Q7k0ig
zF=R+x{0?KqHQS$?1;c74rbDBO}%r>Shbf
zQY85@0SlFkVdum6xg2&G3Gg
zQD$#cD?VoXgO+v8Z^%DcpR3}3ZrqJ?!<5Nk;_r;L&2?&IdYvsea3%6s90e0~M915A
zhsaSiCJ79z^6?TLku)oq>m+&b)D0}U=dBhXvzzqxDikr6tPEw7t6Boz3`!`rh#=7x;pPVB2p
zDu<&cTSBtpW-cxL{0zb4?N%3yomGYF-&pfmcnOAOcguBU;X;K>L8;aF>siR`t76Mb}r=$45dZr-s^A
zH96&r!M?1$QB_xanU+_jM)$+@1>g|>E9CBAM1PAC*y0nu3W2?a#Xlz*nf4pT1n2r1
z(!nOR34iaDTlsO9V$N$<-X)e-aJ~4}2PA||+WW6F#|czpbOZgIfluMlnTTMNV(vaSsl`jVO(t4WcU>`9nGl&03pmXAP&;nx+l-4~rN1
zJ7Z-67h(f9Z0Q4auxYW`kOi^4mfZQHth0MY266%5gY=%>ABjHZRrt$%8`w!5+k8{W
zp}6fW?YY}}PA_VIuSuwAK|Xv2D-k)7!^aIIsAJn8Jd5H;B|Nkhucya;#j>n*8WD!e
zY2`7=`oNrk$jX{cV>zV*$4d)DpMKiE%!tng2Kpb
zX;)iSDx;T_4^^Z(5yRAOxM6M(Yl{PJl*z?{n3{Bmnm%GlA*9!Wc);>zqCkDI8bIom
z=CZ!+k?}QlW4VFV$dz1rVL{|6Klxo{z!%l8(pUE>3vdV&gL6luiiJ)U7`X|@iL--Ed2Rw`2Nug_gC!r|zIQgVzs52%6O$yddn1tJa~H(!;FI^?0(=d#jur5GDZ3Q;
zi3`e2MPQy3hx*tld?mt@#6)?MMZU%p
zTY%4(c@ZXo#gm8JtdfKlPWpi~(c)nd|CNV9MbS`&0uF@|5(S7Gvf{h%|X6y(79X?q)=jFObl
zsV{bXLQx=oBsZm9n>OI85b5bH6#GskL(iv{`@Y`cU5=8a43BK_wc>2?etelZOeN`X
z~Y^D%xw!57B#Bn;x4&Tfr9#Um0@`gdQQS|e8W>QvM^3N
zek`yGz<9obd8b0PzsTZ8>CK7f@87&wd@e7uao-1TKdH!cr7syApaRupDLIH!zqWuQ
z`4q=ULlojg1}a4%iSCQmO=#=Y%G>r9G|dNa3Mr?IMkPWZ#b#9^YdaaWpp7K7tJYq!
zAaycQC^q!QX(}2P%w=~G2*a3P@GR3*oYm(vYS`O0crpsL>NF=TAL_?`-wDL<5gK#(
zOm*62Wm44W3QC5Vit4TqSI%K1towl&ar&GEpsi=@ykwv$y7Oy?=Spf
zJ1anxEw6w5>9oGjhQN~=u$@esk|O@lVHmS^b?^lU$`c!q7`bN@jpfpse$z*L3)or{
zLjujovo1htiXoLbQA-f5SO|%Uu4XdCQpfj{A*@2L)5VCqi!>!jzb|ROFUc!OzX$&o
zONEh{Iw`T}(S)nwY(hzE{C!Z4O1G)H_xC|Z8QIu?sOZI?))hR;-_ZoLK5?~p(#-Jkaboy<8)zZWk;!cKpn2TaNnpB!P=vav8D*`<33
z7>-7?PFOoEfqHgzd(hCBrI`)lnyYwQ;AMxQ%K+cTrh1*hJu9H>^KJ!`Wn&5e3wM2W
z9Yx2&1^q+6m}qmrG#dS5))SkqgNJv1&f>6u{EwSC;jmv
zB>S_fT&~L}7c>j=LSiPg(HTGoLx7JQNOP=_cs!LSt?JD)j1y6IPI`GK0biY+z2}iP!ceKd{9;7i(`Dv*2M9jw*miY02
zE>C$ZB(Vi3B#o^(M(Pq_bqE&R^3&<1L#d)@%fu;7w?ETf^Mo3`0_t^%m!G$-JhwGO
zU2{aKXjrLbQkFICK8Ox*dv?P`_
zQy*9Q^pk<3h6G=gQ)gUqRa54cDyq|EOvg>ZE9-}czCM{trgVuBjN@y_)u*i~u`5FY9!o{<a92+JFFS&vBsEE>v>eFW-Fr+h;@pGTJ)cHf4)%`cpS4%45%kr~}Y5hb*AWHg>f
zNi{UTeqFU!ssr~3ij{s33gopZ7Z=OIti!X^yPm=J5U#CzntqdrNE2!_y!ae!OXUFEn@l1R*|;moT2Z@NN^qPXrB`!@v8bc&zc}ZoWiAHN5Qdj
zOH6%}$eGHjxjM0K$;yWw*2=*bP1DQX{|85)>%FtHTcpI>d9U+LAI`gOcXz$8tRjzB
z^MSAkMi~>_l8e7cNykGitFv-CD^w|6*t2TOZqVm@$_#
zPQ8Ut-Rs6#q~K688cK`yYP}qIi><2I-08tvZf%7Vevzw>;PdkU7l`X@}L`c-D;Si9G3MRUS(a7L7b2p?kW6e=Nz{*z2R-L>z~CP%nwk)
zqF)1Ubc>)VrAM$?&QwFLRf4eK2Hgdyu&WUIpuNtnxehBk>(Uc7y^35&8Nq{*i?9&D
zh64Spg<$PyG-lA=K-U{pFBDbf#X=eU6Zq8fLK_>HG7Cm#to}1Nro##>8UyW%?P#ar
z?a1R#U`aD-?xmlADu3P{ie0|DT)s11yhSpyoI3bhl)mm=UMI1NY;y0*WV@Bv^!WXP
z&!*JQHi4awSkn(}I#uzuO61D#>B?Qn79-&&YHSkGvy*pFz8UO?0dsF{;K>F7CTJFW
zL4ZPVI30FJL+pV73-J+R;03F5#VCVhIbdFTcZ-_9&;Hy9nkbjbg3%>|mWc*m`Au=D
z;PywdK1*l0*G%`&(oL#f^C%wEmC3OIa8YKgES@@BJ4<$aVu=jIm@O`;Sbsr{2CP@L
z-OV#<7v?cYRirGn_?n-aWdTOSJc|+e@aX2!E->-?-i
zoL9`Z*NmvSlyifi&@(61@VS28C@ntLRGZT#`0t+EIcfL3AP$u5-J}W!93TE&pp~?o
zHGMpadU6;G!nPwUm;R{MO#@66Xvx1U($Z&g_iE%AoNTH&FhQMt3Dz>4u
zfKMr>Gu>0}cvaqNhXhX?@>8;Yt;uiauAu334x#V@m=v>TQ_4{nba_-{80pvaFgSqP
zw;LoT&=D~vum8=-C8`|-k#4FSPnTzIFR1P0xbgwjICW!3KRnE5`z3aAeq2
z!khl>a_1+?D@j6YW&dp
zlU7ib^#i1Z)6Ey(XbA_+$pcXS4X;rzIh|gcR+GWB?`Prtet(|TqO?t48U
zAy5g9lS3dJKU#@mJx1BFYWAIk6-@UpR%ANtycR
zHbSD?({4$Z$T{-Ee>TcUjf$s0S_t(p%=Uz*hCnwsUB*EiRViv4j`B6wR%laO$B{
zQb;4b87iXjqhfmG)3AT03^37A(>P-%FcPu5tL(xKGJ~|MSM!So&jOF!87L%AhltdD`j@2r&0bh&kgmqQ@eMwqjwtBek
z)<}!?N%aa-opAb7-loerFTCXq$>dq4u1rS@2q*8^(H#c`=bB#ku?>rtbhvS$)!|yOJyZz32aF%a)1gx+%Bss8m|C?GKX_H>qR?F
zY3OjbLSgQo+vaAxV=#OeKJ*{>XYl3kxLL6G$~
z!-Ui925`V0Tla@Qj=4**?$6g6e0cVRXq}xkx?aHfC0^fvt&gCrbV_9h6rWjEt;P~f
z^sR*~9Osf|OyGKpJ!mgq<6UegFautY>cZsgHu9zD-NC@(hB#u~!9sXfDEqUNBc!t#
zZaRg$FJ^!QM=}UcWS5ef#xqFhM*(=*>HAxO5u%vW_0!=Z59qa`_}y3!&^*2DpJZz#
zRpr)cSdtE>#_!^(sHrGcONT-8Ti8b>;HS@9f&&PS8$xMGu)dQG2q3SW@ix
z4=4r%+}-n)JC%K$1-zY=w0w@Ed~de>_)eY~5)FPfnQ?4r;)XD8`7yfO!vrG%M0RFk
z1&SouF;i1S5I_4vlYjU-)?TQR;r?b@ZtT(LNlZ|Iv}u{adwxj^PceWPh#eo6bha@2qw?*I@=Uo}>xOSLy9-|!QML$EGp{6t%3_und3_R^%~?R{Yq-n0)P$`uDqd8y5?
zP)cJ>vX8qOi1XN({6JkDE#U-AUpht+rgwos3_KB0!eB(Hk{u1BLxL5{SI8*fR4Qc*
zrUawL=X26Eg;FV($Zs-8cz{ucW^n@0~02fjbtOFJ>ehc=v_rJtBrj!-+Hj*1I+@l#x{l!GPfmzFe8gi26smy?{kaKQ|F
zEZk-{iy%Z{nI&)dCmu=%^U0gb-!;SpYU}h+?sCO*D)Ep`Rjd7EaI56Z{}typd;Mp<
zxl%tL8d)dx1W1d=#UHoHrYwpvp0ahZtfzb>Mc`Ax%)QUe2^-rj&ML8jR!_bJhqLI7
zLk@rMi7|zdw2S_<2)Zam)G_Mquju22BLs&UnCo*}Nl}%_Rc4Qhy9=(1Z(!}lX=9?YVw=@ouQ_W1
zwlr+fpnsziyNY~fA4Cp>8vzcnQY`&f--{Uf9ef37NVQiUL&H+c{b39nezi5%xn653
z*WMo?d~q~fVKt}P*mqG7E7NM!doqWeF$(2I--4s{9G=#%q8I6o+F&XDY;7j*)9rHyc9gy0E6Imm)u-I
z1dssmq)1l_fLIsqrM4il{g{_E4{tCk7}a(})r$%pap~JWAa#X12U)TFo?nUE{y6XfOIgscC8io@OcZs
zh-^ZzAy_ah?FcMqDNWj)=E!pVjsAWiOxI(YUm6iahrt_%`__+3s3V?b(Aty8_av#-
z$^H<)akL<(ZiiE>=<_RyC;IXFKdyO8rhq3
zq@;7b4!0aQiIHkchg@)z)L!h9L;2n84c+xk)K)Z7D>Wt*)>eC(oF`w
z<;|Wqcawm9lsp9*6v)yUh(7)5)ZuMVT}ubM+J|BI$kr#sf&s@gq#x7|oAVA+Fmv+f
z!CWL;Q0}JaX;;v7gOWYjjjg7!@oz$t2YycN=+2+!p0nw62*D5Fii02n;S)j#!G{rO
zhZm?sOBui0;RiPa{uAz*1W%>!nn$JWlr@&{I8O?}EGvxWx`+)S`U(*U4~7TB+YZm`
z^W?t;`mt;vh2Gu;P2H(>jK@Xa{({V)hm)VkXskcl8=LnYn`dJUt!^k~iLR}nfg^{f
zX1wZT@X{C=5ZqQf1j>8*npugU=BxnLC8kxO8K8?N3}+M%<#?-4i>q_8uYk@LWf=PQ
z@Z0^F0B`cN~@oNevMJH-yE`lWJ^p6
z%bFTR{A6Ae0$ADS3*8PiR3Gsvw2R@7h`3o|pu!*8LLBEK)HCX0WQq?{t?Kvff(w<96pp3hYVf}r9v^{<8HFN7F|v#RaD8)
zvf3Oktr_0M{OJDM8yjK
zN?6ohk66Xywvl6SAe(&j`RzUjt?|mi$YEqV5o9xKYLauBr=U|h;x)qKNm|Q693V#NJ~oAu;`eP)G~APH=#PqU_xP+w{G_k>w-Af
z3`;h4DZg`z(C*aM^e*IeFW}KuLdWAAKy;lvKxAjr!W&_SIKbB#6{r+Vy?X>-pG2)_
z9}KJDjojl=<<$f%y1UReSth{zNx{Qkn?+h_#KOZ^#!VJE*0(7^Zgdtwv)V%LVx{z;
z5k!EqC(Xl>{7N<1+yfaIBIG44pvMgE6MP;ccQ(arKidw*7XFgbd~K<%ER44})eA}T
zbu6o~DKpDn;4wF-ld?G1H8DX-o&d~kY$-Ib0N^74AW{DMS1vA1+vg2drxx6B(II|Bx
z_YK_Exdn;*GIr~`$%nqppI#O`#E|5D0HuSjX_}Zo;q9FT%JW-xC|?!?1O*`G>>w44U+h~M*jDtm5hb*E6DTj=PJl&L+r2glNs?|6uMd!|DjSZb6)b
zyE`FRaCZ-G!GgQHyF0-(xVr~;cXxMp&4J)^lKb6n?mKgT%*?N8o~nLms;l>=`}C<=
zwbtIg$XcRhY(2Q(XyLKiY5wj;^4Jqk7$T|n;zkp?;}?w+y6Zj89F6FRu9-&cV>&dwmU0clBGqz#z
z=X4DG{Mx!!HQiK~A)yw@p5yzMv=7*R)KD^=a5BMr!c_grc7XtT@wXe5EM7?1;X?1~
zI3>qB3s@Mu?rr*Dk0aV4wZ31;_TxGLEEgC&+Tuit4Pq9Q!(5gJl}GYB2#Goo}Gs`Q0xI=PD;v;wO?Vw=iPzL|@v-5Y2@Dc^el
z594;Q!@-WOPo$ppkN(YU$jvS5bWntNmUp>;ZfI74zlqSo0SH5!wG~ipwhg2$+PMaR*
zS_!N-^4?6yNfR_YTRs)gF7HYWiB$P1{c8~K({5iNYK(i@K3+d|DE($Qz3VvQXYyL~
znvVC0!cS|PF6ydA3FyFmJ}4ycy*)(XKe#vuPPQoZLrhkP^+Oj3R)_}VYkILWa>j>7
zCeJn=M@2k-kPptK9WJ=WBbVTL;(*#XuqZdCt=W){f+@-ZhU$KX)Wr7)