【发布时间】:2018-10-27 02:47:52
【问题描述】:
我是scrapy 和json 的新手,并且正在从事一个scrapy 项目。这是我的脚本:
import scrapy
class MoulaviSpider(scrapy.Spider):
name = "moulavi"
def start_requests(self):
start_urls = [
'https://ganjoor.net/moulavi/masnavi/daftar1/sh1/',
'https://ganjoor.net/moulavi/masnavi/daftar1/sh2/',
]
for url in start_urls:
yield scrapy.Request(url=url, callback=self.title)
def title(self, response):
#'hetitle': response.css('h2').extract(),
return scrapy.Request(callback=self.parse)
def parse(self, response):
for line in response.css('div.b'):
yield {
'right_column': line.css('div.m1').extract(),
'left_column': line.css('div.m2').extract(),
}
我使用 scrapy crawl moulavi -o moulavi.json 运行它。
我知道我的脚本现在不正确。 我想将每个页面的标题添加到 "def title" 内的 json 文件中,然后调用 "def parse" 将其他数据添加到 json 文件中.但是由于我对callback和yield不是很熟悉,所以不知道该怎么做。
正如您在我的代码中看到的,我已经注释了我希望将标题添加到 json 文件中的那一行,但不知道该怎么做。
所以我要做的是刮 url,找到页面的标题,然后写入json文件,然后启动for循环查找所有div标签使用类'm1'和'm2'并将它们写入json文件。然后开始抓取下一个url。
我想要这样的输出:(如果语法正确,则不是 suro)
{
"title":"first page title",
"content":[
{"right_column": ["<div class=\"m1\"><p>من چگونه هوش دارم پیش و پس</p></div>"], "left_column": ["<div class=\"m2\"><p>چون نباشد نور یارم پیش و پس</p></div>"]},
{"right_column": ["<div class=\"m1\"><p>عشق خواهد کین سخن بیرون بود</p></div>"], "left_column": ["<div class=\"m2\"><p>آینه غماز نبود چون بود</p></div>"]},
{"right_column": ["<div class=\"m1\"><p>آینت دانی چرا غماز نیست</p></div>"], "left_column": ["<div class=\"m2\"><p>زانک زنگار از رخش ممتاز نیست</p></div>"]}
]
"title":"second page title",
"content":[
{"right_column": ["<div class=\"m1\"><p>بشنو این نی چون شکایت میکند</p></div>"], "left_column": ["<div class=\"m2\"><p>از جداییها حکایت میکند</p></div>"]},
{"right_column": ["<div class=\"m1\"><p>کز نیستان تا مرا ببریدهاند</p></div>"], "left_column": ["<div class=\"m2\"><p>در نفیرم مرد و زن نالیدهاند</p></div>"]},
]}
提前谢谢你:)
【问题讨论】:
-
url中的scrapy.Request(url=url, callback=self.parse)是什么。该代码不正确,因为范围内没有名为url的变量。 -
我知道我的脚本暂时不正确。
-
我刚刚编辑了我的脚本并删除了那个 url 部分。
-
您想在函数之间传递值并最终返回收集所有属性的项目?
-
你可以在一个函数中完成所有这些,毕竟你会得到同一个页面的标题,对吧?
标签: python json function web-scraping scrapy