python - 学习 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
解决方案
你的 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
为什么它对你“在终端”中的工作方式不同,我不知道。
推荐阅读
- f# - 将 p5.js 与 F# Fable 一起使用
- azure - 附加存储上的 Azure Batch 批量解压缩
- c# - 传递列表以查找项目列表
- apache - 如何配置主机以访问 Docker 中的 Apache ServeName
- java - Java程序反转从txt文件中读取的单词
- angular - Angular - 具有基于对象的动态 id 的可折叠行
- angular - 离子 ngFor 重复列表项
- flask - socketio 事件发生时如何提供 html 代码?
- typescript - tsconfig.json 中的“outDir”如何解决?
- microservices - 微服务断路器和发现服务模式