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.。之后的页面
但是不知道为什么没有进行数据爬取
图片描述

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

回答:

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

回答:

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

以上是 scrapy中callback无用,已阅读seg上相关问题,没能解决,望您解答 的全部内容, 来源链接: utcz.com/p/196125.html

回到顶部