使用Scrapy抓取所有链接和链接内容

时间:2018-09-28 23:56:45

标签: python xpath scrapy

我正在尝试从IMDB抓取每个内部链接,然后从每个链接的页面抓取标题。但是,当我运行下面的代码时,什么也不会返回。

import scrapy
from urllib.parse import urljoin
from FirstSpider.items import MovieItem

class ProductsSpider(scrapy.Spider):

    name = "movies"
    allowed_domains = ["www.imdb.com"]
    start_urls = ('https://www.imdb.com/chart/top',)

    def parse(self, response):
        products = response.xpath('//body/a/@href').extract()
        for p in products:
            url = urljoin(response.url, p)
            yield scrapy.Request(url, callback=self.parse_movie)

    def parse_movie(self, response):
        item = MovieItem()
        item['title'] = response.xpath('//title/text()').extract() 

    return item

我了解到我很可能在parse_movie方法中缺少一行代码,但是整天都在兜圈子,感到有些绝望。我为未意识到可能是一个简单的解决方法而感到抱歉,因为我对scrapy和python还是陌生的。谢谢。

1 个答案:

答案 0 :(得分:0)

您应使用//body//a/@href而不是//body/a/@href来获取所有链接。我认为您只需要电影的链接(页面中还有其他链接),因此将//body//a/@href更改为'//body//td[@class="titleColumn"]/a/@href'

我制作了IMDB抓取工具,如果您愿意的话,请看一下 https://github.com/miguelgarcia/imdb_scraping