最后,上述的字段提取完毕之后,构造一个字典返回即可 。
这样,我们就成功完成了详情页的提取和分析了 。
最后,main 方法稍微改写一下,增加这两个方法的调用,改写如下:
def main(): for page in range(1, TOTAL_PAGE + 1): index_html = scrape_index(page) detail_urls = parse_index(index_html) for detail_url in detail_urls: detail_html = scrape_detail(detail_url) data = https://www.fajihao.com/i/parse_detail(detail_html) logging.info(/'get detail data %s\', data)
这里我们首先遍历了 detail_urls,获取了每个详情页的 URL,然后依次调用了 scrape_detail 和 parse_detail 方法,最后得到了每个详情页的提取结果,赋值为 data 并输出 。
运行结果如下:
2020-03-08 23:37:35,936 - INFO: scraping https://ssr1.scrape.center/page/1...2020-03-08 23:37:36,833 - INFO: get detail url https://ssr1.scrape.center/detail/12020-03-08 23:37:36,833 - INFO: scraping https://ssr1.scrape.center/detail/1...2020-03-08 23:37:39,985 - INFO: get detail data {\'cover\': \'https://img.fajihao.com/article/2022/09/17/1490.jpg@464w_644h_1e_1c\', \'name\': \'霸王别姬 - Farewell My Concubine\', \'categories\': [\'剧情\', \'爱情\'], \'published_at\': \'1993-07-26\', \'drama\': \'影片借一出《霸王别姬》的京戏,牵扯出三个人之间一段随时代风云变幻的爱恨情仇 。段小楼(张丰毅 饰)与程蝶衣(张国荣 饰)是一对打小一起长大的师兄弟,两人一个演生,一个饰旦,一向配合天衣无缝,尤其一出《霸王别姬》,更是誉满京城,为此,两人约定合演一辈子《霸王别姬》 。但两人对戏剧与人生关系的理解有本质不同,段小楼深知戏非人生,程蝶衣则是人戏不分 。段小楼在认为该成家立业之时迎娶了名妓菊仙(巩俐 饰),致使程蝶衣认定菊仙是可耻的第三者,使段小楼做了叛徒,自此,三人围绕一出《霸王别姬》生出的爱恨情仇战开始随着时代风云的变迁不断升级,终酿成悲剧 。\', \'score\': 9.5}2020-03-08 23:37:39,985 - INFO: get detail url https://ssr1.scrape.center/detail/22020-03-08 23:37:39,985 - INFO: scraping https://ssr1.scrape.center/detail/2...2020-03-08 23:37:41,061 - INFO: get detail data {\'cover\': \'https://img.fajihao.com/article/2022/09/17/1491.jpg@464w_644h_1e_1c\', \'name\': \'这个杀手不太冷 - Léon\', \'categories\': [\'剧情\', \'动作\', \'犯罪\'], \'published_at\': \'1994-09-14\', \'drama\': \'里昂(让·雷诺 饰)是名孤独的职业杀手,受人雇佣 。一天,邻居家小姑娘马蒂尔德(纳塔丽·波特曼 饰)敲开他的房门,要求在他那里暂避杀身之祸 。原来邻居家的主人是警方缉毒组的眼线,只因贪污了一小包毒品而遭恶警(加里·奥德曼 饰)杀害全家的惩罚 。马蒂尔德 得到里昂的留救,幸免于难,并留在里昂那里 。里昂教小女孩使枪,她教里昂法文,两人关系日趋亲密,相处融洽 。女孩想着去报仇,反倒被抓,里昂及时赶到,将女孩救回 。混杂着哀怨情仇的正邪之战渐次升级,更大的冲突在所难免……\', \'score\': 9.5}2020-03-08 23:37:41,062 - INFO: get detail url https://ssr1.scrape.center/detail/3...
由于内容较多,这里省略了后续内容 。
可以看到,这里我们就成功提取出来了每部电影的基本信息了,包括封面、名称、类别等等 。
5. 保存数据
好,成功提取到详情页信息之后,我们下一步就要把数据保存起来了 。由于我们到现在我们还没有学习数据库的存储,所以现在我们临时先将数据保存成文本格式,在这里我们可以一个条目一个 JSON 文本 。
定义保存数据的方法如下:
import jsonfrom os import makedirsfrom os.path import existsRESULTS_DIR = \'results\'exists(RESULTS_DIR) or makedirs(RESULTS_DIR)def save_data(data): name = data.get(\'name\') data_path = f\'{RESULTS_DIR}/{name}.json\' json.dump(data, open(data_path, \'w\', encoding=\'utf-8\'), ensure_ascii=False, indent=2)
在这里我们首先定义了数据保存的文件夹 RESULTS_DIR,然后判断了下这个文件夹是否存在,如果不存在则创建 。
接着,我们定义了保存数据的方法 save_data,首先我们获取了数据的 name 字段,即电影的名称,我们将电影的名称当做 JSON 文件的名称,接着构造了 JSON 文件的路径,然后用 json 的 dump 方法将数据保存成文本格式 。在 dump 的方法设置了两个参数,一个是 ensure_ascii 设置为 False,可以保证的中文字符在文件中能以正常的中文文本呈现,而不是 unicode 字符;另一个 indent 为 2,则是设置了 JSON 数据的结果有两行缩进,让 JSON 数据的格式显得更加美观 。
好的,那么接下来 main 方法稍微改写一下就好了,改写如下:
def main(): for page in range(1, TOTAL_PAGE + 1): index_html = scrape_index(page) detail_urls = parse_index(index_html) for detail_url in detail_urls: detail_html = scrape_detail(detail_url) data = https://www.fajihao.com/i/parse_detail(detail_html) logging.info(/'get detail data %s\', data) logging.info(\'saving data to json file\') save_data(data) logging.info(\'data saved successfully\')
- 双11尾款满减包含定金的钱吗 2022年双11预售合并支付尾款参加满减吗
- 双11买黄金会比平时买便宜多少 2022年双11买黄金划算吗
- iPad10和新款iPadPro为什么涨价 iPad全线大涨价了吗2022
- 得物一般哪些节日打折 2022得物双十一有活动吗
- 得物双十一优惠力度有多大 2022年得物双十一所有鞋会降价吗
- 得物双十一优惠力度有多大 得物双十一什么时候开始2022
- 老人为啥说窗帘不用蓝色 2022年窗帘流行纯色还是拼色
- 用了一年多的72v电动车能跑多远 72伏电动车能跑多少公里
- ps cs6是哪年的版本 pscs6是最新版本吗
- 2021年倒闭的品牌 2021年315晚会曝光品牌