用Python抓取票房魔咒

2024-04-20 09:46:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从BoxOfficeMojo收集数据,用于数据科学项目。为了满足我的需要,我对从已经存在的GitHub存储库中找到的代码进行了一些修改。在

https://github.com/OscarPrediction1/boxOfficeCrawler/blob/master/crawlMovies.py

我需要一些关于刮取特定功能的帮助。 虽然我可以正常地获得一部电影的总票房,但票房魔咒有一个功能,可以显示通货膨胀调整后的总收入(如果电影在某一特定年份上映,则为电影的总票房)。通胀调整后的总收入在正常电影链接的末尾附加了一个“&adjust_yr=2018”。在

例如-

泰坦尼克正链(http://www.boxofficemojo.com/movies/?id=titanic.htm

泰坦尼克号2018年通货膨胀调整链接(http://www.boxofficemojo.com/movies/?id=titanic.htm&adjust_yr=2018

在我前面链接的这段特定代码中,通过遍历字母表(http://www.boxofficemojo.com/movies/alphabetical.htm)创建一个url表,然后访问每个url。问题是,按字母顺序排列的列表有电影的正常链接,而不是通胀调整后的链接。从这里得到通货膨胀调整后的值需要做什么改变?在

(我能一次抓取所有电影的唯一方法就是按字母顺序排列。我已经查过了)

如果您有任何疑问或您不理解问题,请回答,而不是投反对票。我真的需要一个答案,否决可能会取消这个问题的资格。在


Tags: 数据代码功能comhttp电影链接www
1条回答
网友
1楼 · 发布于 2024-04-20 09:46:35

一种可能的方法是简单地生成所有必需的url,方法是在普通url的列表中添加“&adjust_yr=2018”,然后抓取每个站点。

我个人喜欢使用xpath(一种用于导航html结构的语言,对于抓取非常有用!)并建议不要使用字符串匹配从HTML中筛选出it was once recommended to me的数据。使用xpath的一个简单方法是通过lxml库。

from lxml import html
    <your setup>
    ....

for site in major_sites:

    page = 1
    while True:
        # fetch table
        url = "http://www.boxofficemojo.com/movies/alphabetical.htm?letter=" + site + "&p=.htm&page=" + str(page)
        print(url)
        element_tree = html.parse(url)
        rows = element_tree.xpath('//td/*/a[contains(@href, "movies/?id")]/@href')
        rows_adjusted = ['http://www.boxofficemojo.com' + row + '&adjust_yr=2018' for row in rows]

        # then loop over the rows_adjusted and grab the necessary info from the page

如果您喜欢使用pandas数据帧库,我还想指出pd.read_html文件()我认为,这项任务是注定的。它可以让你在几乎一行中刮出一整页按字母顺序排列的页面。另外,您还可以在以后按列执行任何必要的替换/注释。

一个可能的方法就是这样。

^{pr2}$

其他资源: Wikipedia has a nice overview of xpath syntax

相关问题 更多 >