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