当前位置: 代码迷 >> python >> 学习Python和Scrapy
  详细解决方案

学习Python和Scrapy

热度:82   发布时间:2023-07-14 08:58:46.0

我正在尝试学习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

您的CSS选择器中存在一个简单的思想错误; 在其中遍历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

我不知道为什么它在终端机中对您有所不同。