你可以在Amazon Prime上观看的所有罗杰·埃伯特(Roger Ebert)的伟大电影

2020-06-10 10:46:25

我和我妻子都是已故影评人罗杰·埃伯特的铁杆粉丝。我们还共享亚马逊优质会员资格。

我想知道:罗杰·埃伯特(Roger Ebert)最喜欢的哪部电影可以在黄金时段免费观看?既然罗杰·埃伯特(Roger Ebert)的评论数以百计,我有一个完美的借口来写一个网络刮板!

与你分享罗杰·埃伯特(Roger Ebert)评价为伟大的电影清单。这就是你来这里的目的,对吧?

附注:如果你只是想看看电影列表,那就跳到这篇文章的末尾吧。

代码质量警告:我在没有太多重构的情况下以最快的速度将其组合在一起,所以它的可读性或优化程度都不是最高的。但就目前而言,它起作用了&;mldr;。

我在做这件事时遇到了一些障碍,我认为这些障碍值得指出,并将澄清我在实现过程中做出的一些决定。

针对分配给变量ebert_url的url执行带有Accept:text/html头(我认为这是请求库的默认头)的常规GET将始终返回电影的第一页(无论您将page查询参数设置为什么)。

解决方案是什么?Accept标头字段需要设置为application/json,服务器才能返回包含该特定页面的电影的JSON。

首先,他们的目录搜索没有公开可用的Amazon API。看起来你可以给他们发电子邮件来获得授权,但是我不想浪费我的时间。

我开始使用请求库。事实证明,如果您没有设置适当的浏览器代理,您将得到503和一些关于自动化是如何不受欢迎的消息。如果您确实伪造了一个适当的代理,但没有设置来自服务器响应的cookie,您将得到:

抱歉,我们只需要确认你不是机器人。为获得最佳结果,请确保您的浏览器接受Cookie。

您会注意到,我在函数Amazon_search中使用了一些正则表达式来解析页面上的电影片名搜索结果。原因是,当我尝试在搜索结果标签上使用美丽汤的find_all函数时,我什么也得不到。我的猜测是页面上有一些无效的HTML,并混淆了漂亮的html.parser解析器,这并不是非常宽松。

原来,我可以改用html5lib解析器,而不是使用regex。

html5lib解析器是最宽松的解析器-比html.parser宽松得多。因此,如果我需要对该函数进行额外的更改,我会重构它以使用该解析器,并去掉看起来令人讨厌的正则表达式。

没有更多的告别,这里是所有伟大的电影电影,包括在PRIME!

这里有完整的电影数据集(亚马逊上没有,Prime提供但不是免费的,Prime是免费的):https://docs.google.com/spreadsheets/d/1XkdEqzXbhivEGhty_hVV8nNeJBhd4HKKSCSIM97MbjA/edit?usp=sharing.