在哪里添加request.meta到我的脚本上爬行一次



我下载了一次scrapy crawl,并试图在我的程序中运行它。我想从http://books.toscrape.com/然后从这个url中抓取书名。我知道我可以把每一本书的标题都从第一页上刮下来,但作为一次爬行的练习,我想这样做。我已经添加了中间件,需要知道在哪里添加request.meta。通过一些研究,没有太多的代码可以提供一些示例指导,所以希望有人能在这里提供帮助。两周前,我学习了python的基础知识,现在很吃力。我试过了,但结果没有改变。有人能帮帮我吗。我添加了[:2],这样如果我将其更改为[:3],我就可以向自己表明它是有效的。

def parse(self, response):
all_the_books = response.xpath("//article[@class='product_pod']")
for div in all_the_books[:2]:
book_link = 'http://books.toscrape.com/' + div.xpath(".//h3/a/@href").get()
request = scrapy.Request(book_link, self.parse_book)
request.meta['book_link'] = book_link
yield request
def parse_book(self, response):
name = response.xpath("//div[@class='col-sm-6 product_main']/h1/text()").get()
yield {
'name': name,
}

其文档显示

为了避免对特定页面进行多次爬网设置request.meta['crawl_onex']=真

所以你需要做

def parse(self, response):
all_the_books = response.xpath("//article[@class='product_pod']")
for div in all_the_books[:2]:
book_link = 'http://books.toscrape.com/' + div.xpath(".//h3/a/@href").get()
request = scrapy.Request(book_link, self.parse_book)
request.meta['crawl_once'] = True
yield request

它不会再次抓取该链接

最新更新