我正在尝试从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还是陌生的。谢谢。
答案 0 :(得分:0)
您应使用//body//a/@href
而不是//body/a/@href
来获取所有链接。我认为您只需要电影的链接(页面中还有其他链接),因此将//body//a/@href
更改为'//body//td[@class="titleColumn"]/a/@href'
。
我制作了IMDB抓取工具,如果您愿意的话,请看一下 https://github.com/miguelgarcia/imdb_scraping