我想要抓的网站有以下几页:
到目前为止一切顺利。我能够抓取我需要的所有数据,但唯一的问题是将一个页面引用到它的章节,或者引用它的书中的章节。我已经阅读了将书籍信息传递给meta的内容:
scrapy.Request(url=url, callback=self.parse_chapter, meta={book: book})
但我无法弄清楚如何在我的项目管道中引用它们。有什么帮助吗?
答案 0 :(得分:0)
您的元调用缺少引号。您可以正确设置元字段并在回调函数中获取它,如下所示:
# Meta is a python dictionary so you must use dictionary syntax.
yield scrapy.Request(link, callback=self.parse_chapters meta={'item': item})
def parse_chapters(self, response):
item = response.meta['item']
您可以在scrapy项目字段中存储任何内容。您可以按如下方式定义项目:
class MyItem(scrapy.Item):
f = scrapy.Field()
book = f
chapters = f
pages = f
每次进入新页面时,您都会将项目传入并检索。您可以存储所有章节和页面的列表。或者,如果要存储嵌套项,可以存储如下字典:
dict = {"Book": "Moby Dick", "Chapters": {"1": ["page1", "page2", "page3"]
"2": ["page4", "page5", "page6" ]}
# Now you only need 1 field in your item I believe you must save as string
item['book'] = str(dict)
对于您提供的有限信息,我能做的最好。如果您想提供一些代码并提出明确的问题,我会尝试进一步帮助您。
PS:我可以随意编辑,因为我确定这里有错误。
答案 1 :(得分:-1)
我猜在抓取过程中无法引用这些项目。将它们保存在一个表中,然后在刮取后分离记录。