首页 > 解决方案 > 学习 Python 和 Scrapy

问题描述

我正在尝试学习 Scrapy 和 Python。我有一个我不明白的问题。我通过终端运行同一段代码,然后再次通过脚本运行,结果不同。终端给了我所有的标题(我想要的)脚本只是给了我第一个。

for title in response.css('div.section-content ul'):
     item = {
             'title' : title.css('li h3 a::text').extract_first(),
            }

我正在尝试提取 iTunes 电影页面上的所有电影名称。

任何帮助表示赞赏。谢谢

更新

import scrapy


class ItunesSpider(scrapy.Spider):
    name = 'itunes'
    allowed_domains = ['apple.com']
    start_urls = ['apple.com/itunes/charts/movies/']

    def parse(self, response):

        self.log ('I just visited: ' + response.url)
        for title in response.css('div.section-content ul'):
            item = { 'title' : title.css('li h3 a::text').extract_first(), }
            yield item

标签: pythonscrapy

解决方案


你的 CSS-Selector 有一个简单的想法错误;您正在循环遍历所有类型的项目ul(并且只有其中一个)。你想要的是循环遍历li元素。

# -*- coding: utf-8 -*-
import scrapy


class ItunesSpider(scrapy.Spider):
    name = 'itunes'
    allowed_domains = ['apple.com']
    start_urls = ['https://apple.com/itunes/charts/movies/']

    def parse(self, response):
        self.log ('I just visited: ' + response.url)
        for title in response.css('div.section-content ul li'):
            title = title.css('h3 a::text').extract_first()
            self.log('Title: %s' % title)
            item = { 
                'title' : title,
            }   
            yield item

为什么它对你“在终端”中的工作方式不同,我不知道。


推荐阅读