scrapy中callback无用,已阅读seg上相关问题,没能解决,望您解答

新手上路,请多包涵

问题描述

爬取亚马逊商品列表,将数据存入mongodb
爬取第一页之后将下一页链接传入Request中,在shell中可以得到下一页链接
然而在数据库中只能看见第一页的数据
在命令行中可以看到爬取完第一页数据之后,有下一页的链接出现,却没有进行数据爬取

问题出现的平台版本及自己尝试过哪些方法

linux,mongodb
尝试在Request中加入dont_filter=Ture
并没有成功而且还爬了一些不需要的东西

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

spider.py

from scrapy import Request, Spider
from amazon.items import AmazonItem
class AmazonSpider(Spider):

name = 'book'
allowed_domains = ['amazon.com']
start_urls = ['https://www.amazon.com/s/ref=lp_2649512011_il_ti_movies-tv?rh=n%3A2625373011%2Cn%3A%212625374011%2Cn%3A2649512011&ie=UTF8&qid=1533351160&lo=movies-tv']


def parse(self, response):
    result = response.xpath('//div[@id="mainResults"]/ul/li')
    # print(result)
    for it in result:
        item = AmazonItem()
        item['title'] = it.css('h2::text').extract_first()
        item['price'] = it.css('.a-link-normal.a-text-normal .a-offscreen::text').extract_first()
        yield item

    next_page = response.css('#bottomBar #pagn #pagnNextLink::attr("href")').extract_first()
    url = response.urljoin('https://www.amazon.com',next_page)
    yield Request(url=url, callback=self.parse, dont_filter=True)

pipelines.py:

class MongoPipeline(object):

def __init__(self, mongo_uri, mongo_db):
    self.mongo_uri = mongo_uri        
    self.mongo_db = mongo_db



@classmethod
def from_crawler(cls, crawler):
    return cls(
        mongo_uri = crawler.settings.get('MONGO_URI'),
        mongo_db = crawler.settings.get('MONGO_DB')
        )


def open_spider(self, spider):
    self.client = pymongo.MongoClient(self.mongo_uri)
    self.db = self.client[self.mongo_db]


def process_item(self, item, spider):
    self.db[item.collection].insert(dict(item))
    return item

def close_spider(self, spider):
    self.client.close()

你期待的结果是什么?实际看到的错误信息又是什么?

想要在url传入Request之后能够callback到parse中,进行下一页的相关内容的爬取
在命令行中可以看到爬取完第一页数据之后,有下一页的链接出现,却没有进行数据爬取
而且链接复制到浏览器可以打开而且就是第2.。3.4.。之后的页面
但是不知道为什么没有进行数据爬取
图片描述

希望大佬们可以不吝赐教,万谢!

阅读 2.2k
2 个回答
✓ 已被采纳新手上路,请多包涵

昨天又试了一遍
到第二页的页面中F12之后发现爬取规则变了
一顿无语之后,重新定义了第二页之后的规则,然后问题解决了

新手上路,请多包涵

给你点思路,下面是我之前写的
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题