使用Python和Scrapy的IMDB Scraper

时间:2015-01-16 18:43:37

标签: python scrapy web-crawler scraper

好吧,我是编程新手,我认为最好的学习方法是编程。我的部分工作包括在IMDB上搜索电影并粘贴导演,作家(前四)演员,以及Excel电子表格中IMDB页面的链接。

我的最终目标是拥有一个包含电影标题和年份的CSV,并让刮刀从CSV中获取这些变量,搜索IMDB,提取数据并将数据导出到新的CSV中。


我已经阅读和研究了大约一个星期。我成功地完成了Scrapy教程,但是我遇到了麻烦,从那里到了理想的目的。

  • 如何将CSV中的值导入我的蜘蛛脚本?我认为它看起来像这样:

    name = COLUMN1
    year = COLUMN2
    
    class imdb_spider(scrapy.Spider):
      name = "imdb"
      allowed_domains = ["imdb.com"]
      start_urls = [
        "http://www.imdb.com/find?ref_=nv_sr_fn&q=/(name)&(year)"
        ]
    

我不知道如何从CSV文件中提取。


  • 从那里,我需要蜘蛛跟随页面上的第一个链接(这将是电影名称),然后在后续页面上“看到完整演员和工作人员”链接。

我需要的所有信息都会显示在最后一页:http://www.imdb.com/title/tt0081505/fullcredits?ref_=tt_ov_st_sm


  • 定义提取内容对我来说真是令人费解。

这是我用萤火虫拉的东西:

导演:

<td class="name">
<a href="/name/nm0000040/?ref_=ttfc_fc_dr1"> Stanley Kubrick </a>
</td>

作家:

<td class="name">
<a href="/name/nm0000040/?ref_=ttfc_fc_wr2"> Stanley Kubrick </a>
</td>

演员(如果可能,只需要前四个):

<td class="itemprop" itemtype="http://schema.org/Person" itemscope="" itemprop="actor">
<td class="ellipsis"> ... </td>

我不确定如何定义页面链接本身。


之后,我只需将其循环到整个列表中并使用数据保存新的CSV。

我知道这是一个激烈的问题,我不是要求任何人为我编码。如果我知道在哪里看/如何解决这个问题,我愿意投入工作。我正在阅读Scrapy文档,但目前还不清楚。

如果有比Python和Scrapy明显更好的方法,请告诉我。

感谢。

编辑:Mac OS x 10.10.1,Python 2.7,Scrapy 0.24.4,要编辑的TextWrangler

1 个答案:

答案 0 :(得分:0)

csv模块非常方便,对于具有不规则/空字段的制表符分隔文件也很有用。 (导入csv)

    with open('something_something_darkside.txt', 'rb') as f:
        data = list(csv.reader(f,delimiter='\t'))
        for row in data:

就网页而言,我找到了使用Beautiful Soup将html转换为xml的方法,并使用xml解析器来提取我需要的内容。这些方法可能已经过时但仍然可靠。